4

我正在使用 Qt 5.3.2 的 QTest 对一个类执行一些单元测试。我正在使用 VS2013 Express 构建测试器。VS 项目文件是使用 qmake 从 .pro 文件生成的。为了运行测试,我将 QTEST_MAIN 添加到我的源文件中。

项目构建并且测试器可执行工作正常。但是我在查看结果时遇到问题(例如通过输出)。当测试运行时,会打开一个控制台窗口,接收所有测试输出。如果测试完成,控制台窗口会立即关闭,我实际上看不到它显示的内容。特别是我看不到某些测试是否失败。

我想 QTest 使用标准输出作为默认输出通道。所以我尝试了 VS 调试器选项“将标准输出重定向到输出窗口”,但没有效果。

那么这应该如何工作呢?

测试输出是否真的应该进入一个新打开的控制台窗口?那为什么不一直开呢?还是应该将整个测试输出转到 VS 调试器输出面板?有没有办法重定向输出?

4

1 回答 1

4

Visual Studio Add-in有为你的版本安装的Visual Studio吗?如果没有,您应该从qt-project.org/downloads下载它。

我做了一个简单的qt 测试并将*.pro文件导入到里面Visual Studio并运行测试;对我来说,一切正常,窗口保持打开状态,显示测试简历:

在此处输入图像描述

我建议编写示例,使用 Visual Studio 将其导入Visual Studio Add-in并比较项目设置。可能需要在某处更改标志才能使窗口保持打开状态。

也可能是您需要Console (/SUBSYSTEM:CONSOLE)设置链接器选项。右键单击项目,进入项目Properties,选择Configuration Properties>Linker>System。对于Subsystem右侧窗格中的属性,单击右侧列中的下拉框。现在选择Console (/SUBSYSTEM:CONSOLE)并重新运行测试(Ctrl+F5 而不仅仅是 F5)(1)。

如果您在Debug模式下运行测试(即按F5),您的窗口将不会保持打开状态。如果你想让它保持打开,你需要getch()在你的测试析构函数中添加一个调用,当你的测试完成时,窗口会一直等待输入(例如Enter):

对于我的测试代码将是:

#include <QtTest/QtTest>
#include <conio.h>

class TestQString: public QObject
{
    Q_OBJECT
private slots:
    void toUpper();

public:
    ~TestQString()
    {
        getch();
    }
};

void TestQString::toUpper()
{
    QString str = "Hello";
    QCOMPARE(str.toUpper(), QString("HELLO"));
}

QTEST_MAIN(TestQString)
#include "testqstring.moc"

(1) -如何在 Visual C++ 中保持控制台窗口打开?

于 2014-10-12T14:02:13.763 回答