需求

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"

参考