用QTestLib测试我的类

用QTestLib测试我的类,qt,unit-testing,qttest,Qt,Unit Testing,Qttest,我需要在Qt中为我的学校项目做一些单元测试,尽管我已经阅读了Qt教程,但我不知道我应该如何编写这样的测试。我提到的教程中显示的所有测试都是指内置方法。我应该如何为自定义类编写单元测试?假设这是我拥有的最简单的类: 任务.h #ifndef TASK_H #define TASK_H #include <QDateTime> #include <QTime> class Task { private: bool ifDone; QString name;

我需要在Qt中为我的学校项目做一些单元测试,尽管我已经阅读了Qt教程,但我不知道我应该如何编写这样的测试。我提到的教程中显示的所有测试都是指内置方法。我应该如何为自定义类编写单元测试?假设这是我拥有的最简单的类:

任务.h

#ifndef TASK_H
#define TASK_H

#include <QDateTime>
#include <QTime>

class Task
{
private:
    bool ifDone;
    QString name;
    QString description;
    QDateTime *startTime;
    QTime *start;
    QDateTime *endTime;
    QTime *end;
    bool neededReminder;
    QDateTime *reminderTime;

public:
    Task(QString _name, QString _description, QDate *dayClicked, 
         QTime *_startTime, QTime *_endTime, bool reminder);

    QString toString();
};

#endif // TASK_H    `

我试图将这个类包括到测试类中,并将.h和.cpp文件都添加到项目中,但我什么也没做。有没有人可以为上面的类编写一些示例测试方法(用于toString方法和构造函数),这样我就可以继续进行其余的测试了。提前谢谢。

说实话,我认为这个问题应该结束了,你应该开始阅读一些你收到的书。还有,我不知道这里有什么要测试的,也许是字符串的结果?但是,看看这是否有助于您:

UnitTests.pro

QT       += testlib
QT       -= gui
TARGET = tst_unitteststest
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE = app
SOURCES += tst_unitteststest.cpp task.cpp
DEFINES += SRCDIR=\\\"$$PWD/\\\"
HEADERS += task.h
tst_unitteststest.cpp

#include <QString>
#include <QtTest>
#include "task.h"

class UnitTestsTest : public QObject
{
   Q_OBJECT

public:
   UnitTestsTest();

private Q_SLOTS:
   void initTestCase();
   void cleanupTestCase();
   void testCase1();
};

UnitTestsTest::UnitTestsTest()
{
}

void UnitTestsTest::initTestCase()
{
}

void UnitTestsTest::cleanupTestCase()
{
}

void UnitTestsTest::testCase1()
{
   QVERIFY2(true, "Failure");
   Task t("name", "desc", new QDate(1, 1, 2012), new QTime(0, 0), new QTime(1, 0), false);
   QVERIFY(t.toString() == "name 00:00 - 01:00");
}
QTEST_APPLESS_MAIN(UnitTestsTest)
#include "tst_unitteststest.moc"
#包括
#包括
#包括“task.h”
类UnitTestsTest:公共QObject
{
Q_对象
公众:
UnitTestsTest();
专用Q_插槽:
void initTestCase();
void cleanupTestCase();
void testCase1();
};
UnitTestsTest::UnitTestsTest()
{
}
void UnitTestsTest::initTestCase()
{
}
void UnitTestsTest::cleanupTestCase()
{
}
void UnitTestsTest::testCase1()
{
QVERIFY2(正确,“失败”);
任务t(“名称”、“描述”、新QDate(2012年1月1日)、新QTime(0,0)、新QTime(1,0)、false);
QVERIFY(t.toString()=“name 00:00-01:00”);
}
QTEST_APPLESS_MAIN(单元测试测试测试)
#包括“tst_unitteststest.moc”

考虑到这里有内存泄漏。。。但我不知道你想让你的班级变成什么样子。当然,考试在这里会通过。

说实话,我认为这个问题应该结束,你应该开始阅读一些提供给你的书。还有,我不知道这里有什么要测试的,也许是字符串的结果?但是,看看这是否有助于您:

UnitTests.pro

QT       += testlib
QT       -= gui
TARGET = tst_unitteststest
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE = app
SOURCES += tst_unitteststest.cpp task.cpp
DEFINES += SRCDIR=\\\"$$PWD/\\\"
HEADERS += task.h
tst_unitteststest.cpp

#include <QString>
#include <QtTest>
#include "task.h"

class UnitTestsTest : public QObject
{
   Q_OBJECT

public:
   UnitTestsTest();

private Q_SLOTS:
   void initTestCase();
   void cleanupTestCase();
   void testCase1();
};

UnitTestsTest::UnitTestsTest()
{
}

void UnitTestsTest::initTestCase()
{
}

void UnitTestsTest::cleanupTestCase()
{
}

void UnitTestsTest::testCase1()
{
   QVERIFY2(true, "Failure");
   Task t("name", "desc", new QDate(1, 1, 2012), new QTime(0, 0), new QTime(1, 0), false);
   QVERIFY(t.toString() == "name 00:00 - 01:00");
}
QTEST_APPLESS_MAIN(UnitTestsTest)
#include "tst_unitteststest.moc"
#包括
#包括
#包括“task.h”
类UnitTestsTest:公共QObject
{
Q_对象
公众:
UnitTestsTest();
专用Q_插槽:
void initTestCase();
void cleanupTestCase();
void testCase1();
};
UnitTestsTest::UnitTestsTest()
{
}
void UnitTestsTest::initTestCase()
{
}
void UnitTestsTest::cleanupTestCase()
{
}
void UnitTestsTest::testCase1()
{
QVERIFY2(正确,“失败”);
任务t(“名称”、“描述”、新QDate(2012年1月1日)、新QTime(0,0)、新QTime(1,0)、false);
QVERIFY(t.toString()=“name 00:00-01:00”);
}
QTEST_APPLESS_MAIN(单元测试测试测试)
#包括“tst_unitteststest.moc”

考虑到这里有内存泄漏。。。但我不知道你想让你的班级变成什么样子。测试当然会在这里通过。

您需要的一切都在这里:正如我上面所说的,我已经阅读了本教程,但是当涉及到非标准库的方法时,我不知道如何引用它。尝试将头文件包含到测试文件中会出现错误,将类文件添加到项目中只会导致其他结果。第一个代码段显示了如何
#包含头文件,如果这是您的意思的话?还有一个附加的
.pro
文件,告诉您需要使用
CONFIG
变量添加什么。您需要的一切都在这里:如上所述,我已经阅读了本教程,但是当涉及到非标准库的方法时,我不知道如何引用它。尝试将头文件包含到测试文件中会出现错误,将类文件添加到项目中只会导致其他结果。第一个代码段显示了如何
#包含头文件,如果这是您的意思的话?还有一个附加的
.pro
文件,告诉您需要使用
CONFIG
变量添加什么?默认情况下由Qt Creator向导添加。我认为这有助于理解它是如何工作的,所以我把它放在那里了。我知道那里没有什么可考的,但我的老师并不真的想听。他说要做测试,所以我要做。无论如何谢谢你的帮助。@jahsiotr在toString中确实有需要测试的行为。你的教授是对的。像上面这样的测试是有用的。例如,如果您误解了QDate格式字符串的要求,此测试将向您展示这一点?默认情况下由Qt Creator向导添加。我认为这有助于理解它是如何工作的,所以我把它放在那里了。我知道那里没有什么可考的,但我的老师并不真的想听。他说要做测试,所以我要做。无论如何谢谢你的帮助。@jahsiotr在toString中确实有需要测试的行为。你的教授是对的。像上面这样的测试是有用的。例如,如果您误解了QDate格式字符串的要求,此测试将向您展示这一点。