如何编写单元测试。
在第一章中,我们将看到如何为一个类编写一个简单的单元测试,以及如何执行它。
编写一个测试
让我们假设你想测试我们的QString类的行为。首先,您需要一个包含测试函数的类。这个类必须继承自QObjet
#include <QtTest/QtTest>
class TestQString: public QObject
{
Q_OBJECT
private slots:
void toUpper();
};
注意:您需要包含QTest头文件,并将测试函数声明为私有槽,以便测试框架找到并执行它。
然后,您需要实现测试函数本身。实现可能是这样的:
void TestQString::toUpper()
{
QString str = "Hello";
QVERIFY(str.toUpper() == "HELLO");
}
QVERIFY()宏评估作为参数传递的表达式。如果表达式的结果为true,则继续执行测试函数。否则,描述失败的消息将被附加到测试日志中,测试函数将停止执行。
但是如果你想要一个更详细的输出到测试日志,你应该使用QCOMPARE()宏代替:
void TestQString::toUpper()
{
QString str = "Hello";
QCOMPARE(str.toUpper(), QString("HELLO"));
}
如果两个字符串不相等,则将两个字符串的内容附加到测试日志中,从而立即看到比较失败的原因。
最后,要使我们的测试用例成为一个独立的可执行文件,需要以下两行代码:
QTEST_MAIN(TestQString)
#include "testqstring.moc"
QTEST_MAIN()宏扩展为运行所有测试函数的简单main()方法。请注意,如果测试类的声明和实现都在.cpp文件中,我们还需要包含生成的moc文件,以使Qt的内省工作。
执行一个测试
现在我们已经完成了测试的编写,我们想要执行它。假设我们的测试保存为testqstring.cpp,保存在一个空目录中,我们使用qmake来创建一个项目并生成一个makefile来构建这个测试。
/myTestDirectory$ qmake -project "QT += testlib"
/myTestDirectory$ qmake
/myTestDirectory$ make
注意:如果你正在使用windows,用nmake或任何你使用的构建工具替换make。
运行结果可执行文件应该会给出如下输出:
********* Start testing of TestQString *********
Config: Using QtTest library %VERSION%, Qt %VERSION%
PASS : TestQString::initTestCase()
PASS : TestQString::toUpper()
PASS : TestQString::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped
********* Finished testing of TestQString *********
恭喜你!您刚刚使用Qt test框架编写并执行了第一个单元测试。
示例项目@ code.qt.io