我可以在单元测试中写入控制台吗?如果是,为什么控制台窗口没有打开?

 

问题描述:

我在 Visual Studio 中有一个测试项目。我使用 Microsoft.VisualStudio.TestTools.UnitTesting

我在我的一个单元测试中添加了这一行:

Console.WriteLine("Some foo was very angry with boo");
Console.ReadLine();

当我运行测试时,测试通过了,但控制台窗口根本没有打开。

有没有办法让控制台窗口可以通过单元测试进行交互?


 

第 1 个答案:

注意:下面的原始答案应该适用于 Visual Studio 2012 以上的任何版本的 Visual Studio。Visual Studio 2013
似乎不再有测试结果窗口。相反,如果您需要特定于测试的输出,您可以使用@Stretch 的建议Trace.Write()将输出写入输出窗口。


Console.Write方法不写入“控制台”——它写入连接到正在运行进程的标准输出句柄的任何内容。同样,Console.Read从连接到标准输入的任何内容中读取输入。

当您通过 Visual Studio 2010
运行单元测试时,标准输出由测试工具重定向并存储为测试输出的一部分。您可以通过右键单击“测试结果”窗口并将名为“Output
(StdOut)”的列添加到显示中来看到这一点。这将显示写入标准输出的任何内容。

可以使用
P/Invoke
手动打开控制台窗口,如sinni800
所说
。通过阅读AllocConsole文档,该函数似乎将重置stdinstdout处理以指向新的控制台窗口。(我对此不是
100% 确定;如果我已经重定向stdout到 Windows 以从我这里窃取它,这对我来说似乎有点错误,但我没有尝试过。)

不过,总的来说,我认为这是一个坏主意。如果您只想使用控制台转储有关单元测试的更多信息,那么输出就在那里。继续使用Console.WriteLine您的方式,并在完成后检查“测试结果”窗口中的输出结果。


在 Clojure 中测试列表是否包含给定值的最佳方法是什么?特别是,contains?目前的行为让我感到困惑:(contains? '(100 101 102) 101) => fals ...