Qt单元测试框架
来源:互联网 发布:分布式的文档数据库是 编辑:程序博客网 时间:2024/06/10 20:24
原文出自:http://blog.csdn.net/zhu_xz/article/details/5076157
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毫秒。
- Qt单元测试框架
- Qt单元测试框架
- Qt单元测试框架
- QT单元测试
- Qt 单元测试
- Qt的单元测试框架QTestLib----测试自定义的类。
- 单元测试框架
- 单元测试框架
- 单元测试框架
- qt单元测试QTest
- qt 之单元测试
- Qt单元测试QTestLib
- Qt单元测试浅析
- Qt单元测试QTestLib
- Qt单元测试工具 QTestlib
- Qt单元测试--基本使用
- Silverlight 2单元测试框架
- 单元测试框架rgtest
- 程序员的八个级别
- Apache详细配置
- Java测试工具
- 枚举类总结
- HDU dp 2059 龟兔赛跑
- Qt单元测试框架
- C/C++源代码书写规范
- 社科院房地产蓝皮书:北京房价今年易涨难跌
- 关闭Windows 2008下面应用程序出错后的提示
- 两次BFS求树的直径(算法导论22.2-7)
- 百度地图之标注物聚合
- VS2005调试技巧集合
- printf中的%c,%d,%u........都分别代表输出的是什么类型的?
- MFC多线程各种线程用法 .