如何从QtCreator运行qtestlib单元测试

时间:2010-05-11 08:18:07

标签: qt-creator qttest

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

我跟着This guide用QtTestlib做了一些单元测试,程序编译得很好。 但我如何运行它们?如果调试buid,我希望它们在GUI应用程序启动之前运行,如果是发布版本则不运行。

4 个答案:

答案 0 :(得分:18)

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

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

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

答案 1 :(得分: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();
}

然后进入项目窗格并通过复制“Debug”添加新目标“Test”。在Build Steps下,为Make that is

添加一个参数
CXXFLAGS+=-DTEST

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

答案 2 :(得分:4)

最后想出了如何在启动应用程序之前运行测试。

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

#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();
}

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

答案 3 :(得分:2)

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

如果您使用的是像cmake而不是qmake这样的构建系统,那么您可以尝试自动运行单元测试,作为构建过程本身的一部分。不幸的是,我不知道有任何方法可以用qmake做到这一点。 Qake创建者支持CMake,但不如qmake。