编写一个单元测试程序
环境 Ubuntu14.04 + Qt 4.8.6
1. 首先,新建文件:
$ mkdir testQString
$ cd testQString
$ touch testQString.cpp
2. 编辑 testQString.cpp :
测试QString类的行为。首先,需要一个用于包含测试函数的类。这个类必须从QObject继承,包含QTest头文件,并且测试函数必须声明为私有槽,这样测试框架才可以找到并执行他们。
#include <QtTest/QtTest>
#include <QDebug>
class TestQString:public QObject
{
Q_OBJECT
private slots:
void toUpper();
};
void TestQString::toUpper()
{
QString str = "Hello";
QVERIFY(str.toUpper() == "HELLO");
QVERIFY(str.toUpper() == "HELLO WORLD");
}
QTEST_MAIN(TestQString)
#include "testQString.moc"
QVERIFY()宏:将计算传入的表达式的值。如果为真,则测试函数继续进行;否则会向测试日志中增加一条描述错误的信息,并且该测试函数会停止执行。
QCOMPARE()宏:向测试日志中增加更多的输出信息.如果两个字符串不相等,他们的值都会追加到测试日志中,
QTEST_MAIN()宏: 使测试程序能够单独执行, 将扩展成一个简单的main()函数,该main()函数会执行所有的测试函数。注意:如果测试类的声明和实现都在同一个cpp文件中,需要包含产生的moc文件,以使Qt的内省机制起作用。
3.编译
$ qmake -project "QT += testlib" -o testQString.pro
$ qmake
$ make
- 注意: 如果使用windows,将make换成nmake或者其它编译工具。
4. 运行
$ ./testQString
********* Start testing of TestQString *********
Config: Using QTest library 4.8.6, Qt 4.8.6
PASS : TestQString::initTestCase()
FAIL! : TestQString::toUpper() 'str.toUpper() == "HELLO WORLD"' returned FALSE. ()
Loc: [testQString.cpp(16)]
PASS : TestQString::cleanupTestCase()
Totals: 2 passed, 1 failed, 0 skipped
********* Finished testing of TestQString *********
$