需求
qt 如何进行单元测试
解决
创建项目
- new project -> other project -> auto test project
- framework: Qt Test
- Gui Application: 是否需要测试 Gui Widget
- QApplication: 是否需要 QApplication 相关
- Generate init and clean: 是否需要创建初始化和清理代码
初始化和清理
- initTestCase() : 第一个测试函数之前被调用
- initTestCase_data (): 创建一个全局测试数据表
- cleanupTestCase (): 最后一个测试函数后被调用
- init (): 每个测试函数之前被调用
- cleanup (): 每个测试函数之后被调用
测试语句
一般用的比较多的就是 QVERIFY
, QVERIFY2
, QCOMPARE
- QVERIFY, 只能提示真假
- QVERIFY2, 额外提供设定好的信息
- QCOMPARE, 提供更为详细的报错说明
QVERIFY(c1.getA() == 0);
QVERIFY2(c2.getA() == A, "first operand doesn't match");
QCOMPARE(mCalc.Sum(), A0 + B0);
测试类申明
- QTEST_MAIN: 完整项目测试
- QTEST_GUILESS_MAIN: 没有界面的测试
- QTEST_APPLESS_MAIN: 没有界面,没有事件的测试
// full Qt application
QTEST_MAIN(TestName)
// core Qt application: no GUI, but event loop is available
QTEST_GUILESS_MAIN(TestName)
// no Qt application: no GUI and no events
QTEST_APPLESS_MAIN(TestName)
如果申明的 cpp
文件没有对应的 h
文件,那么还需要在末尾额外包含信息:
QTEST_APPLESS_MAIN(TestCalculator)
#include "TestCalculator.moc"