5

我正在 Qt Creator 中开发一个 GUI 应用程序,并想为它编写一些单元测试。

我按照本指南使用 QtTestlib 进行了一些单元测试,程序编译良好。但是我该如何运行它们呢?如果调试构建,我希望它们在 GUI 应用程序启动之前运行,如果发布构建则不运行。

4

4 回答 4

18

不要将测试代码放入您的主项目中。您应该为您的单元测试创​​建一个单独的项目,然后构建并运行它。不要修改你的主项目来运行测试。

理想情况下,您应该设置一个构建服务器,它会自动调用您的单元测试项目并构建您的版本。您可以编写此脚本。

永远不要破解你的主应用程序来运行你的单元测试。如果您需要进行集成级别测试(即测试程序在完全编译和集成后如何工作),您应该使用不同的集成测试框架,该框架允许您从外部脚本源测试程序。FrogLogic 的 Squish就是这样一种框架。

于 2010-10-08T21:33:20.513 回答
5

使用多个目标和预处理器标志来实现这一点:

int main(int argv, char *args[])
{
#ifdef TEST
    ::TestsClas::runTests();
#endif
    QApplication app(argv, args);
    MainWindow mainWindow;
    mainWindow.setGeometry(100, 100, 800, 500);
    mainWindow.show();

    return app.exec();
}

然后进入项目窗格并通过复制“调试”添加新目标“测试”。在 Build Steps 下,向 Make 添加一个参数,即

CXXFLAGS+=-DTEST

这样,测试包含在 Test 目标中,但不包含在 Debug 或 Release 目标中。

于 2011-05-27T11:41:07.367 回答
3

终于弄清楚如何在启动应用程序之前运行测试。

我在测试类中添加了一个静态方法来运行测试:

#include <QtTest/QtTest>

TestClass::runTests()
{
    TestClass * test = new TestClass();

    QTest::qExec(test);
    delete test;
}

在主函数中,执行:

int main(int argv, char *args[])
{
    ::TestsClas::runTests();

    QApplication app(argv, args);
    MainWindow mainWindow;
    mainWindow.setGeometry(100, 100, 800, 500);
    mainWindow.show();

    return app.exec();
}

测试结果打印在应用程序输出窗口中。

于 2010-05-31T12:20:05.297 回答
2

Qt creator 目前还没有明确支持运行单元测试(直到 Qt Creator 2.0beta)。因此,您暂时需要手动启动测试。

如果您使用的是 cmake 之类的构建系统而不是 qmake,那么您可以尝试将单元测试作为构建过程本身的一部分自动运行。不幸的是,我不知道使用 qmake 执行此操作的任何方法。Qt creator 支持 CMake,但不如 qmake。

于 2010-05-31T07:19:52.000 回答