【问题标题】:How to get console output in Visual Studio 2012 Unit Tests如何在 Visual Studio 2012 单元测试中获取控制台输出
【发布时间】:2013-05-24 19:50:08
【问题描述】:

我在 VS 2012 中有一个托管 C++ 单元测试。测试运行良好,我可以 验证包含多个cout 调用的循环是否已执行。

但是,当我查看测试资源管理器时,测试被标记为通过 但是输出没有超链接,因为我习惯于 c# 项目。

我的测试结束时的代码是

for (int i = 0; i < 4; i++)
{
    cout << parameters[i];
    cout << endl;
}

我可以在逐步验证时运行 它在调试器中。我也试过 cerr 但没有区别。

【问题讨论】:

  • 如果我使用 Console.WriteLine 或 Debug.WriteLine 在输出窗口中仍然没有任何内容。
  • 您可以改用 [in this question][1] 中描述的 Google Test 吗? [1]:stackoverflow.com/questions/16531398/…

标签: c++ unit-testing visual-studio-2012 cout test-explorer


【解决方案1】:

您可以使用 Debug::WriteLine()(在 System::Diagnostics 命名空间中)或 Console::WriteLine() 将输出写入 Visual Studio 2012 控制台。

测试代码(注意 System::Diagnostics 命名空间在别处声明)。

测试结果视图。

点击“输出”链接后:

它没有使用 std::cout,但希望它能够满足您的需求。

【讨论】:

  • 有什么办法可以现场观看吗?在 NUnit 中是可能的。
  • @Babak - 我不知道有一种方法可以实时观看这种输出。观看实时输出的一个不错的选择是使用 OutputDebugString() 并在此答案中进行了描述:stackoverflow.com/a/1333542/542494
  • 感谢上帝!耶稣,你不会相信找到这个答案有多难。谢谢。
  • @olen_garn 有时会出现输出,有时不会,我不知道为什么?任何修复建议,我正在使用 vs 企业 rc。我尝试了 Console 和 Debug Writeline
  • @user2727195 - 因为它确实会间歇性地显示给你,所以我想知道在某些情况下,Console::WriteLine() 或 Debug::WriteLine() 是否在测试中的代码路径上那没有被执行。您可以尝试用 Assert::Fail("I failed here") 或类似内容替换日志记录行。如果测试没有失败并显示此消息,则该行未执行。如果这看起来太明显了,请道歉,但有时先检查明显和不可能的情况会更简单。
【解决方案2】:

对我来说似乎可以使用:

Logger::WriteMessage("What ever message");

运行测试后,您可以通过单击outputTest Explorer 窗口中看到输出

【讨论】:

  • 我必须在输出窗口(Ctrl + W,O)上将“显示输出:”从“常规”更改为“测试”。
  • 这似乎是“本机”测试中的唯一方法。谢谢。
  • 需要什么参考才能使 Logger 可用?
  • @MatthewJamesBriggs 那是在 C++ 中而不是在 C# 中,所以我认为没有任何参考。
【解决方案3】:

我不知道我能不能给你一个明确的答案,但我或许能提供一个线索。

在我需要在自定义构建步骤中将输出输出到控制台窗口的旧代码中,我使用了以下几行:

_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);

http://msdn.microsoft.com/en-us/library/8hyw4sy7(v=vs.71).aspx 处有 _CrtDbgReport 的描述。

对我来说,这使得我托管的 C++ 的输出通过构建输出窗口显示出来。希望它可以帮助您进行单元测试。

【讨论】:

    【解决方案4】:

    【讨论】:

    • 虽然有一个连接票声明这不受支持,但我确实在输出窗口中看到了我的调试信息。不知道为什么它会间歇性地工作
    • 尽管这个问题是针对 C++ 的。我明确地为 C# 提出了这个问题。答案是它有时不起作用。我不确定为什么。但它确实有效......
    猜你喜欢
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2014-11-05
    • 2019-04-02
    • 2012-08-15
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多