Qt单元测试库QTestLib

目录

Qt内置单元测试模块QTestLib,比较好用。Qt Creator的向导可以自动生成Qt单元测试的代码,省去动手写代码的麻烦,缺点是我现在还不理解QTestLib的整个使用流程。

  • * *Qt Creator向导生成如下的代码:

[cpp]
#include
class CoreDataTest : public QObject
{
Q_OBJECT
public:
CoreDataTest();
private Q_SLOTS:
void initTestCase(); // 测设开始时调用
void cleanupTestCase(); // 测试结束时调用
void testDataItem(); // 测试项目
void testDataItem_data(); // 为测试项目提供数据
};
QTEST_APPLESS_MAIN(CoreDataTest)
#include “tst_coredatatest.moc”
[/cpp]
测试项目可以有多个,qt测试框架会自动识别并调用这些方法。以_data结尾的函数为与前面同名的函数提供数据,QTestLib用表格为测试项目提供多组测试数据,测试项目可以逐个获取这些数据进行测试,而不需要显式编写循环语句。如下所示:
[cpp]
void NormalFileNamePatternTest::testLocalFileName_data()
{
QTest::addColumn(“data_item”);
QTest::addColumn(“product_description”);
QTest::addColumn(“inital_time”);
QTest::addColumn(“current_validity”);
QTest::addColumn(“encoding_format”);
DataItem* a_data_item = 0;
a_data_item=new DataItem(QUrl(QString(“/T639L60/gda.639.2013060400000.grb2”)),this);
QTest::newRow(“0”)<getProductDescription(),product_description);
QCOMPARE(data_item->getInitialTime(),inital_time);
QCOMPARE(data_item->getCurrentValidity(),current_validity);
QCOMPARE(data_item->getEncodingFormat(),encoding_format);
}
[/cpp]
QTestLib会自动对每个数据执行一遍测试函数。用QFETCH宏可得到数据,变量名要与data函数中定义的列名相同。
我写的一个测试运行输出如下:
[code]
***\** Start testing of NormalFileNamePatternTest *****
Config: Using QTest library 4.8.4, Qt 4.8.4
PASS : NormalFileNamePatternTest::initTestCase()
PASS : NormalFileNamePatternTest::testLocalFileName()
PASS : NormalFileNamePatternTest::testDataSet()
PASS : NormalFileNamePatternTest::cleanupTestCase()
Totals: 4 passed, 0 failed, 0 skipped
***\** Finished testing of NormalFileNamePatternTest *****
[/code]
可以看到QTestLib运行了两个测试项目testLocalFileName和testDataSet,并都获得通过。
一个失败的例子,我添加下面的测试:
[cpp]
void CoreDataTest::testDataMessage()
{
QCOMPARE(1,2);
}
[/cpp]
测试失败的输出:
[code]
***\** Start testing of CoreDataTest *****
Config: Using QTest library 4.8.4, Qt 4.8.4
PASS : CoreDataTest::initTestCase()
PASS : CoreDataTest::testDataItem()
PASS : CoreDataTest::testDataSet()
FAIL! : CoreDataTest::testDataMessage() Compared values are not the same
Actual (1): 1
Expected (2): 2
d:\test\libs\core\coredata\tst_coredatatest.cpp(108) : failure location
PASS : CoreDataTest::cleanupTestCase()
Totals: 4 passed, 1 failed, 0 skipped
***\** Finished testing of CoreDataTest *****
[/code]