Qt单元测试框架

QTestLib 框架提供了一个简单易用的单元测试框架,需要在工程文件中添加Qt+=testlib。先看一个简单的例子

#include <QtTest/QtTest> class TestQString: public QObject { Q_OBJECT private slots: // 每个private slot函数都是会被自动调用的测试函数 void testToLower(); // 以“_data”结尾的函数向对应的测试函数提供测试数据 void testToLower_data(); }; void TestQString::testToLower() { // 获取测试数据 QFETCH(QString, string); QFETCH(QString, result); // 如果输入的两个参数不同,则会被认为测试失败 QCOMPARE(string.toLower(), result); } void TestQString::testToLower_data() { // 添加数据列 QTest::addColumn<QString>("string"); QTest::addColumn<QString>("result"); // 添加测试数据 QTest::newRow("lower") << "hello" << "hello"; QTest::newRow("mixed") << "HeLlO" << "hello"; QTest::newRow("upper") << "HELLO" << "hello"; } // 用于构建可执行的测试程序 QTEST_MAIN(TestQString) #include "testqstring.moc"

 

此外,Qt还提供了以下四个会被自动调用的private slot:
initTestCase():在测试开始前被调用
cleanupTestCase():在测试结束后被调用
init():每个测试函数执行前被调用
cleanup():每个测试函数执行后被调用

测试完成后输出的结果如下所示:

********* Start testing of TestQString ********* Config: Using QTest library 4.5.3, Qt 4.5.3 PASS : TestQString::initTestCase() PASS : TestQString::testToLower() PASS : TestQString::cleanupTestCase() Totals: 3 passed, 0 failed, 0 skipped ********* Finished testing of TestQString *********

 

为了测试GUI组件 ,可以使用诸如QTest::keyClick()函数,通过内部事件传递,来模拟本地窗口系统的事件。例如:

// 代码取自 http://qt.nokia.com/doc/qtestlib-tutorial4-testgui-cpp.html #include <QtGui> #include <QtTest/QtTest> class TestGui: public QObject { Q_OBJECT private slots: void testGui_data(); void testGui(); }; void TestGui::testGui_data() { QTest::addColumn<QTestEventList>("events"); QTest::addColumn<QString>("expected"); // 添加按键事件 QTestEventList list1; list1.addKeyClick('a'); QTest::newRow("char") << list1 << "a"; QTestEventList list2; list2.addKeyClick('a'); list2.addKeyClick(Qt::Key_Backspace); QTest::newRow("there and back again") << list2 << ""; } void TestGui::testGui() { QFETCH(QTestEventList, events); QFETCH(QString, expected); QLineEdit lineEdit; // 模拟按键事件,并比较结果 events.simulate(&lineEdit); QCOMPARE(lineEdit.text(), expected); } QTEST_MAIN(TestGui) #include "testgui.moc"

 

最后看看如何测试benchmark

void TestQString::testBenchmark() { QString str("HeLlO"); // 以下代码被测试benchmark QBENCHMARK { str.toLower(); } }

 

得到如下输出:

RESULT : TestQString::testBenchmark(): 0.00062 msec per iteration (total: 41, iterations: 65536)

 

该输出表示测试共进行了65536次,共耗时41毫秒,每次测试的平均时间为0.00062毫秒。

你可能感兴趣的:(list,测试,单元测试,qt,events,testing)