Chapter 1: 编写一个单元测试
在第一章, 我们演示如何为类编写一个简单的单元测试, 以及如何运行它.
编写一个测试
假设你想测试QString的行为. 首先, 你需要编写一个类, 包含你的测试函数. 这个类继承自QObject:
#include <QtTest/QtTest> class TestQString: public QObject { Q_OBJECT private slots: void toUpper(); };
注意: 你需要包含QTest头文件, 并将测试函数声明为私有槽函数, 这样, Qt测试框架会查找并运行它.
然后, 你需要实现测试函数. 实现代码如下所示:
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做额外的工作.
运行Test
现在, 我们编写完我的测试程序, 想运行它. 假设我们的测试文件在一个空目录, 并保存为testqstring.cpp
, 我们可以使用qmake创建一个工程, 生成makefile文件.
/myTestDirectory$ qmake -project "QT += testlib" /myTestDirectory$ qmake /myTestDirectory$ make
注意: 如果你使用Windows系统, 你应该将make
替换成nmake
, 或者其他构建工具.
运行测试程序的输出结果如下所示:
********* 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框架, 编写并运行你第一个单元测试程序.
文件: