我想向现有的 Qt 应用程序添加一些单元测试,但我不知道该怎么做。
官方文档解释了,告诉我需要创建一个包含测试代码的类(我想这个类本身和它的实现都属于同一个文件?)然后,文档指出:
最后,为了使我们的测试用例成为独立的可执行文件,需要以下两行:
QTEST_MAIN(TestQString) #include "testqstring.moc"
我是否必须将其添加到包含测试代码的同一文件中?或者我必须创建其他文件吗?或者也许我应该把它放在现有的
main.cpp
中?
另一个官方文档关于
QTEST_MAIN
似乎更加神秘:
最后,如果测试类有一个 static public void initMain() 方法,则在实例化 QApplication 对象之前由 QTEST_MAIN 宏调用该方法。这是在 5.14 中添加的。
但是,在他们的示例中,没有
initMain
方法。我需要添加一个吗?而且,无论如何,我应该如何处理实际的 QTEST_MAIN
宏?
看起来像:
QTEST_MAIN
取代了 main
功能。本质上,我原来问题的答案是扔掉现有的 main
并改为 QTEST_MAIN
。它编译并运行时执行测试。
它只运行一个类(!),“正确的方法是每个测试类都有[一个]测试项目。” (!)(来源)
有一个
QTest::qExec
函数可以调用,而不是使用 QTEST_MAIN
——可以从现有的 main
中调用它。然而,一次调用仍然匹配一个测试类,并且该函数“不得被多次调用”。 (来源)
因此,一种更“标准”的测试方法是转向更成熟的测试框架,例如 GTest。我不知道的是,将 Qt 包含在 GTest 项目中非常容易。必须补充一下:
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
和:
target_link_libraries(... Qt6::Core Qt6::Gui Qt6::Widgets)
到
CMakeLists.txt
,这几乎就是所需要的。