【问题标题】:How to run qtestlib unit tests from QtCreator如何从 QtCreator 运行 qtestlib 单元测试
【发布时间】:2014-02-04 07:33:21
【问题描述】:

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

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

【问题讨论】:

    标签: qt-creator qttest


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗨詹姆斯。假设我有一个包含一堆菜单列表项的应用程序。单击时,每个菜单项都会显示一个表单。如何进行单元测试以单击菜单列表的每个项目并检查是否显示了正确的表单?
    • 您不能为此进行单元测试。你需要像 FrogLogic 的 Squish 这样的东西来进行这种集成测试。单元测试比 UI 测试低得多。至少这是我理解它的工作方式。如果你发现你可以做这种事情,我很想知道,但我读到的所有内容都说这是对单元测试的滥用。
    【解决方案2】:

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

    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 目标中。

    【讨论】:

    • 这无法在 Qt Creator IDE 中查看和运行测试。
    【解决方案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();
    }
    

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

    【讨论】:

    • 你不想用测试代码污染你的应用主程序。
    【解决方案4】:

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

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

    【讨论】:

    • 就个人而言,我发现 cmake 支持非常好。我什至使用 CTEST 通过 Creator 批量运行我的 QTEST 单元测试类。在自定义构建配置中。
    猜你喜欢
    • 1970-01-01
    • 2012-08-20
    • 2011-02-10
    • 2011-09-08
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 2011-04-25
    • 2016-11-18
    相关资源
    最近更新 更多