如何在Visual Studio 2012单元测试中获取控制台输出

24

我在VS 2012中有一个托管的C++单元测试。测试可以正常运行,并且我可以验证执行了多个cout调用的循环。

然而,当我查看测试资源管理器时,测试标记为已通过,但没有像我在C#项目中所习惯的输出超链接。

我的测试末尾代码如下:

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

我可以验证它在调试器中单步运行。我还尝试使用cerr但没有任何区别。


如果我使用Console.WriteLine或Debug.WriteLine,输出窗口仍然没有任何内容。 - n8CodeGuru
你可以像这个问题中描述的那样使用Google Test吗? - MichaelH
4个回答

19
您可以使用 Debug::WriteLine() (在 System::Diagnostics 命名空间中) 或 Console::WriteLine() 将输出写入到 Visual Studio 2012 控制台。
以下是测试的代码(请注意,System::Diagnostics 命名空间在其他地方声明)。 测试 测试结果视图。 输入图像说明 单击“输出”链接后: 输入图像说明 它没有使用 std::cout,但希望这样做能满足您的需求。

2
有没有办法实时观看?在 NUnit 中是可能的。 - Babak
1
@Babak - 我不知道有什么方法可以实时观看这种输出。观看实时输出的一个好选择是使用OutputDebugString(),并在这个回答中有描述:https://dev59.com/unM_5IYBdhLWcg3wjjwp#1333542 - olen_garn
谢天谢地!耶稣,你不会相信找到这个答案有多难。谢谢你。 - Drew
@olen_garn 有时候输出会出现,有时候不会,我不确定为什么?有什么建议可以修复吗?我正在使用 VS Enterprise RC。我尝试了 Console 和 Debug Writeline 两种方式。 - user2727195
1
@user2727195 - 由于您表示有时会显示,这让我想知道是否在某些情况下,Console::WriteLine() 或者 Debug::WriteLine() 是在您的测试中的代码路径上但未被执行。您可以尝试将日志行替换为 Assert::Fail("I failed here") 或类似内容。如果测试不出现此错误消息,则该行未被执行。如果这显得太简单或者太明显了,我很抱歉。但是有时候首先检查明显和不可能的情况会更加简单。 - olen_garn
@olen_garn asserts会执行,但有时我需要手动失败assert以查看输出,例如Assert.IsNotNull(null, result);将输出与错误消息连接起来,我也使用了文件写入,但这很麻烦。问题是在我的系统中,从ConsoleDebug输出的结果不是100%可靠的。是否有某种设置可以检查开启或关闭? - user2727195

17

对我来说,似乎使用以下方式起作用:

Logger::WriteMessage("任何信息");

运行测试后,您可以通过单击输出测试资源管理器窗口中查看输出。


1
我必须将输出窗口(Ctrl + W,O)上的“显示输出来自:”从“常规”更改为“测试”。 - Slate
这似乎是“本地”测试中唯一的方法。谢谢。 - ManicQin
需要什么参考才能使Logger可用? - Matthew James Briggs
2
@MatthewJamesBriggs 这是C++而不是C#,所以我认为没有任何引用。 - Hanan N.

2

我不确定我能给你一个明确的答案,但我也许可以提供一个线索。

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

_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++输出显示在构建输出窗口中。希望它能帮助你进行单元测试。


1

虽然有一个连接票声明这不受支持,但我确实在输出窗口中看到我的调试信息。不确定为什么它会间歇性地工作。 - n8CodeGuru
尽管这个问题是针对C++的,但我明确地为C#提出了这个问题。答案是有时候它不起作用。我不确定为什么。但它确实起作用... - n8CodeGuru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接