如何在Visual Studio 2012单元测试中获取控制台输出 < VS 2012中有一个托管C++单元测试。测试运行良好,我可以 验证是否执行了包含多个cout调用的循环

如何在Visual Studio 2012单元测试中获取控制台输出 < VS 2012中有一个托管C++单元测试。测试运行良好,我可以 验证是否执行了包含多个cout调用的循环,c++,unit-testing,visual-studio-2012,cout,test-explorer,C++,Unit Testing,Visual Studio 2012,Cout,Test Explorer,但是,当我查看测试浏览器时,测试被标记为已通过 但是没有超链接的输出,因为我习惯了c# 项目 测试结束时的代码是 for (int i = 0; i < 4; i++) { cout << parameters[i]; cout << endl; } for(int i=0;i

但是,当我查看测试浏览器时,测试被标记为已通过 但是没有超链接的输出,因为我习惯了c# 项目

测试结束时的代码是

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

cout根据Microsoft connect trx,测试结果不推荐

:(


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

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

测试结果视图

单击“输出”链接后:


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

我不知道我能给您一个明确的答案,但我可以提供一个线索

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

_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
在_CrtDbgReport上有一个描述


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

似乎适用于:

Logger::WriteMessage(“What ever message”);


运行测试后,如果我要使用Console.WriteLine或Debug.WriteLine,您可以在
测试浏览器
窗口中通过单击
输出

查看输出。输出窗口中仍然没有任何内容。您可以改为使用[本问题中][1]所述的Google测试吗?[1]虽然有一个连接票声明这是不支持的,但我确实看到了我的调试信息在输出窗口。不知道为什么它工作间歇性,即使这个问题是C++。我明确地问这个问题的C。答案有时是不起作用。我不知道为什么。但它确实有效…有没有办法看它的现场??这在NUnit中是可能的。@Babak-我不知道有什么方法可以实时观看这种输出。观看实时输出的一个好方法是使用OutputDebugString()在这个答案中有描述:感谢上帝!耶稣,你不会相信找到这个答案有多难。谢谢你。@olen_garn有时输出会出现,有时不会,我不知道为什么?有任何修复建议,我正在使用vs enterprise rc。我试过控制台和调试Writeline@user2727195-因为它确实会间歇性地为您显示,这让我想知道,在某些情况下,Console::WriteLine()或Debug::WriteLine()是否位于测试中未执行的代码路径上。您可以尝试用Assert::Fail(“此处我失败”)替换日志行或者类似的。如果测试没有因此消息而失败,则该行不会执行。如果这看起来太明显,请道歉,但有时先检查明显和不可能的情况更简单。我必须在输出窗口(Ctrl+W,O)上将“显示输出从:”从“常规”更改为“测试”。这似乎是“本机”中的唯一方法测试。谢谢。需要什么参考才能使记录器可用?@ MatthewJamesBriggs,C++中没有C,所以我不认为有任何引用。