如何从QtCreator运行qtestlib单元测试

Vie*_*urs 5 qt-creator qttest

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

我按照本指南使用QtTestlib进行了一些单元测试,程序编译得很好.但我如何运行它们?我希望它们在GUI应用程序启动之前运行,如果调试buid而不是在发布版本时运行.

Jam*_*ans 18

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

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

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

  • 你不能为此进行单元测试.你需要像FrogLogic的Squish这样的集成测试.单元测试比UI测试低得多.至少这是我理解它工作的方式.如果你发现你可以做这种事情我很想知道,但我读到的一切都说这是对单元测试的误用. (3认同)

小智 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();
}
Run Code Online (Sandbox Code Playgroud)

然后进入项目窗格并通过复制"Debug"添加新目标"Test".在Build Steps下,为Make is添加一个参数

CXXFLAGS+=-DTEST
Run Code Online (Sandbox Code Playgroud)

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


Vie*_*urs 3

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

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

#include <QtTest/QtTest>

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

    QTest::qExec(test);
    delete test;
}
Run Code Online (Sandbox Code Playgroud)

在主函数中,执行以下操作:

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();
}
Run Code Online (Sandbox Code Playgroud)

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

  • 您不想用测试代码污染您的应用程序主程序。 (8认同)