如何从 QTestLib/QTest 获取有关测试失败的信息

SAM*_*SAM 3 qt unit-testing qtestlib

我正在使用 QTestLib 库和 QTest 来运行我的单元测试。我正在 Windows 7 上工作,并在 MVSC 2010 编译器中使用 Qt 4.8。当我使用以下方法运行测试时:

QTest::qExec(TestDateDD/whateverTestClass);
Run Code Online (Sandbox Code Playgroud)

我在控制台中得到输出:

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

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

cgm*_*gmb 5

没有办法改变记录器的功能。QAbstractTestLogger 被硬编码为输出到文件或标准输出,并且您不能向 QTestLog 提供您自己的实现。

您可以将 stdout 重定向到您的文本框,或者您可以-o filename在调用QTest::qExec和读回文件时将其指定为参数。

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

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