如何从 QtCreator 运行 qtestlib 单元测试

发布于 2024-08-31 16:53:20 字数 233 浏览 7 评论 0原文

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

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

I am developing a GUI application in Qt Creator and want to write some unit tests for it.

I followed This guide to make some unit tests with QtTestlib and the program compiles fine.
But how do I run them? I would like them to be run before the GUI app starts if debug buid and not run if release build.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

ˇ宁静的妩媚 2024-09-07 16:53:20

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

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

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

Do not put test code into your main project. You should create a separate project for your unit tests then build and run that. Do not modify your main project to run tests.

Ideally, you should have a build server set up that will automatically invoke your unit test project and build your releases. You can script this.

Never hack your main application to run your unit tests. If you need to do integration level testing (i.e. testing how the program works once it is fully compiled and integrated) you should use a different integration testing framework that allows you to test the program from an externally scripted source. FrogLogic's Squish is one such framework.

感受沵的脚步 2024-09-07 16:53:20

使用多个目标和预处理器标志来实现此目的:

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”。在“构建步骤”下,向“Make”添加一个参数,

CXXFLAGS+=-DTEST

这样测试将包含在“测试”目标中,但不包含在“调试”或“发布”目标中。

Use multiple targets and preprocessor flags to achieve this:

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

Then go into the projects pane and add a new target "Test" by duplicating "Debug". Under Build Steps, add an argument to Make that is

CXXFLAGS+=-DTEST

That way the test is included in the Test target, but not the Debug or Release targets.

胡渣熟男 2024-09-07 16:53:20

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

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

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

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

Finally figured out how to run tests before starting the app.

I added one static method in the tests class to run the tests:

#include <QtTest/QtTest>

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

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

In the main function, do:

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

The test results are printed in application output window.

黯然 2024-09-07 16:53:20

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

如果您使用的是 cmake 这样的构建系统而不是 qmake,那么您可以尝试在构建过程本身中自动运行单元测试。不幸的是我不知道有什么方法可以用 qmake 来做到这一点。 CMake 受 Qt Creator 支持,但不如 qmake。

Qt creator does not yet explicitly support running unit tests at this time (up to Qt Creator 2.0beta). So for the time being you will need to start the tests manually.

If you are using a build system like cmake instead of qmake then you could try to run the unit tests automatically as part of the build process itself. Unfortunately I am not aware of any method to do this with qmake. CMake is supported by Qt creator, although not as well as qmake.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文