用QTestLib测试我的类
我需要在Qt中为我的学校项目做一些单元测试,尽管我已经阅读了Qt教程,但我不知道我应该如何编写这样的测试。我提到的教程中显示的所有测试都是指内置方法。我应该如何为自定义类编写单元测试?假设这是我拥有的最简单的类: 任务.h用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;
#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格式字符串的要求,此测试将向您展示这一点。