我在 Visual Studio 中有一个测试项目。我使用 Microsoft.VisualStudio.TestTools.UnitTesting 。
我在我的一个单元测试中添加了这一行:
Console.WriteLine("Some foo was very angry with boo"); Console.ReadLine();
当我运行测试时,测试通过了,但控制台窗口根本没有打开。
有没有办法让控制台窗口可以通过单元测试进行交互?
注意:下面的原始答案应该适用于 Visual Studio 2012 以上的任何版本的 Visual Studio。Visual Studio 2013 似乎不再有测试结果窗口。相反,如果您需要特定于测试的输出,您可以使用@Stretch 的建议Trace.Write()将输出写入输出窗口。
Trace.Write()
该Console.Write方法不写入“控制台”——它写入连接到正在运行进程的标准输出句柄的任何内容。同样,Console.Read从连接到标准输入的任何内容中读取输入。
Console.Write
Console.Read
当您通过 Visual Studio 2010 运行单元测试时,标准输出由测试工具重定向并存储为测试输出的一部分。您可以通过右键单击“测试结果”窗口并将名为“Output (StdOut)”的列添加到显示中来看到这一点。这将显示写入标准输出的任何内容。
您 可以使用 P/Invoke手动打开控制台窗口,如sinni800 所说。通过阅读AllocConsole文档,该函数似乎将重置stdin并stdout处理以指向新的控制台窗口。(我对此不是 100% 确定;如果我已经重定向stdout到 Windows 以从我这里窃取它,这对我来说似乎有点错误,但我没有尝试过。)
AllocConsole
stdin
stdout
不过,总的来说,我认为这是一个坏主意。如果您只想使用控制台转储有关单元测试的更多信息,那么输出就在那里。继续使用Console.WriteLine您的方式,并在完成后检查“测试结果”窗口中的输出结果。
Console.WriteLine