QTEST_MAIN到底应该放在哪里?

问题描述 投票:0回答:1

我想向现有的 Qt 应用程序添加一些单元测试,但我不知道该怎么做。

官方文档解释了,告诉我需要创建一个包含测试代码的类(我想这个类本身和它的实现都属于同一个文件?)然后,文档指出:

最后,为了使我们的测试用例成为独立的可执行文件,需要以下两行:

QTEST_MAIN(TestQString)
#include "testqstring.moc"

我是否必须将其添加到包含测试代码的同一文件中?或者我必须创建其他文件吗?或者也许我应该把它放在现有的

main.cpp
中?

另一个官方文档关于

QTEST_MAIN
似乎更加神秘:

最后,如果测试类有一个 static public void initMain() 方法,则在实例化 QApplication 对象之前由 QTEST_MAIN 宏调用该方法。这是在 5.14 中添加的。

但是,在他们的示例中,没有

initMain
方法。我需要添加一个吗?而且,无论如何,我应该如何处理实际的
QTEST_MAIN
宏?

c++ qt unit-testing
1个回答
0
投票

看起来像:

  1. QTEST_MAIN
    取代了
    main
    功能。本质上,我原来问题的答案是扔掉现有的
    main
    并改为
    QTEST_MAIN
    。它编译并运行时执行测试。

  2. 它只运行一个类(!),“正确的方法是每个测试类都有[一个]测试项目。” (!)(来源

  3. 有一个

    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
,这几乎就是所需要的。

© www.soinside.com 2019 - 2024. All rights reserved.