【问题标题】:How to get the information from QTestLib/QTest on test failure如何从 QTestLib/QTest 获取有关测试失败的信息
【发布时间】:2012-06-02 01:48:50
【问题描述】:

我正在使用 QTestLib 库和 QTest 来运行我的单元测试。我正在使用 Windows 7 并使用带有 MVSC 2010 编译器的 Qt 4.8。 当我使用以下方式运行测试时:

QTest::qExec(TestDateDD/whateverTestClass);

我在控制台中得到输出:

********* Start testing of TestDateDD *********
    Config: Using QTest library 4.8.0, Qt 4.8.0
    PASS   : TestDateDD::initTestCase()
    PASS   : TestDateDD::testValidity()
    FAIL!  : TestDateDD::testMonth(2012/7/10) Compared values are not the same
    Actual (date.longMonthName(date.month())): July
    Expected (monthname): June
    ..\UnitTestingPlugiin\TestDateDD.cpp(38) : failure location
    PASS   : TestDateDD::cleanupTestCase()
    Totals: 3 passed, 1 failed, 0 skipped
    ********* Finished testing of TestDateDD *********

但是我的要求是在我的 GUI 中为每个测试槽显示此消息。我做了一些研究,发现qtestlog.cpp 使用自己的 messageHandler 来管理测试输出并将结果显示为 PASS 或 FAIL 以及失败消息、行号等。有什么方法可以处理 QTest 的这个 messageHandler我的 GUI 应用程序?

【问题讨论】:

    标签: unit-testing qt qtestlib


    【解决方案1】:

    无法更改记录器的功能。 QAbstractTestLogger 被硬编码为输出到文件或标准输出,您不能将自己的实现提供给 QTestLog。

    您可以将标准输出重定向到您的文本框,或者您可以在调用QTest::qExec 时指定-o filename 作为参数,并在文件被写出时回读它。

    但是,我建议您将测试编译成单独的可执行文件并使用QProcess 运行它们。它继承了QIODevice,将其数据发送到您的窗口应该不难。

    使用QProcess 的其他几个好处是单元测试中的崩溃或断言不会导致您的 GUI 崩溃,并且您将能够同时运行多个测试而不会混淆您的输出.

    【讨论】:

    • 感谢您的建议,我现在可以将测试结果写入 xml 文件,然后从中读取。
    猜你喜欢
    • 2021-12-03
    • 2015-10-14
    • 2017-01-27
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    相关资源
    最近更新 更多