如何在执行MSTesttesting期间写入Console.Out

语境:
我们有一些用户在我们的Web应用程序中报告file uploadfunction的问题。 它只是偶尔发生,没有任何特殊的模式。 我们一直在试图弄清楚它,很长一段时间,我们可以在任何可以帮助我们的地方添加debugging信息,抓取日志等,但是我们还没有能够重现或者弄清楚。

问题:
我现在试图通过使用MSTest和WatiN来重复这个应该重复失败很多次(几百次)的操作。 只是想知道testing得到的回路有多远,我想打印一下这样的内容:

Console.WriteLine(String.Format("Uploaded file, attempt {0} of {1}", i, maxUploads)); 

但是,这不会出现在输出窗口中。 现在我知道你将在testing结果中得到控制台的输出(以及从Debug.Writeline等输出的内容),但是直到testing完成之后才能使用。 而且由于我经过数百次重复testing可能需要相当长的一段时间,所以我想知道它有多远。

题:
有没有一种方法可以testing执行期间在输出窗口获得控制台输出?

控制台输出不显示是因为后端代码没有在testing的上下文中运行。

您可能最好使用Trace.WriteLine (在System.Diagnostics中),然后添加一个写入文件的跟踪侦听器。

来自MSDN的这个话题展示了一个这样做的方法。

使用Debug.WriteLine 。 这将立即在“ Output窗口中显示您的消息。 唯一的限制是你必须在Debug模式下运行你的testing。

 [TestMethod] public void TestMethod1() { Debug.WriteLine("Time {0}", DateTime.Now); System.Threading.Thread.Sleep(30000); Debug.WriteLine("Time {0}", DateTime.Now); } 

产量

在这里输入图像说明

我find了自己的解决scheme。 我知道Andras的答案可能是与MSTEST最一致的,但我不想重构我的代码。

 [TestMethod] public void OneIsOne() { using (ConsoleRedirector cr = new ConsoleRedirector()) { Assert.IsFalse(cr.ToString().Contains("New text")); /* call some method that writes "New text" to stdout */ Assert.IsTrue(cr.ToString().Contains("New text")); } } 

一次性ConsoleRedirector被定义为:

 internal class ConsoleRedirector : IDisposable { private StringWriter _consoleOutput = new StringWriter(); private TextWriter _originalConsoleOutput; public ConsoleRedirector() { this._originalConsoleOutput = Console.Out; Console.SetOut(_consoleOutput); } public void Dispose() { Console.SetOut(_originalConsoleOutput); Console.Write(this.ToString()); this._consoleOutput.Dispose(); } public override string ToString() { return this._consoleOutput.ToString(); } } 

我有同样的问题,我正在“运行”testing。 如果我改为“debugging”testing,debugging输出显示就像所有其他跟踪和控制台。 我不知道如何看到输出,如果你“运行”的testing。

你最好设置一个testing,并从这个testing中创build一个性能testing。 这样,您可以使用默认工具集来监视进度。