NUnit 3中的TestContext.Out和TestContext.Progress有什么区别?

时间:2017-05-22 16:43:23

标签: c# unit-testing console nunit nunit-3.0

我正在重构使用NUnit 3.6的测试应用程序。大多数应用程序是由非开发人员编写的,需要重构/重组。有很多遗留助手类使用标准

Console.Out.WriteLine();
Console.Error.WriteLine();

记录错误和测试进度的方法。已经做了一些努力来使用NUnit

TestContext.Progress.WriteLine();
TestContext.Out.WriteLine();
TestContext.Error.WriteLine();

提供"实时输出的方法"作为试运行,但它不一致。接下来,我希望所有帮助程序类/方法都使用Console.Out / Error方法,以便在没有NUnit依赖项的情况下分离它们,然后在[SetUp]方法中为每个测试重定向输出。

[SetUp]
public void BaseTestSetupMethod(){
   Console.SetError(TestContext.Error);
   /* Set Console.Out to TestContext.Out or TestContext.Progress */
}

我的问题是,TestContext.Out和TestContext.Progress有什么区别?我应该将Console.Out重定向到哪个常规消息,例如打印当前正在运行的测试的名称及其执行的操作?

编辑:我仔细阅读了NUnit 3的文档,包括https://github.com/nunit/docs/wiki/TestContext页面。虽然它列出了 TestContext.Out TestContext.Progress 之间的区别,但它们并不具有描述性,并且没有示例说明为什么在实践中使用其中一个而不是另一个。 / p>

1 个答案:

答案 0 :(得分:0)

答案确实在链接的文档页面(https://github.com/nunit/docs/wiki/TestContext)上,但是距问这个问题已经有一段时间了,所以从那时起也许文档页面得到了改进。

至少现在它说:

  

出局

     

获取用于将输出发送到当前测试结果的TextWriter。

     

错误

     

获取用于发送错误输出的TextWriter,以立即输出   显示。

     

进度

     

获取用于发送常规(非错误)输出以立即显示的TextWriter。

此处的关键字是“立即显示”-当向Error and Progress发送某些内容时,其目的是测试运行程序应立即显示它,而发送到Out的文本将在每个测试用例终止之前不可见。 >

这是因为NUnit 3将捕获Console.Out,直到测试用例完成才输出它。在NUnit 2中,常规的Console.Out和Error立刻可见。