我的库有一些后台线程,它们将调试输出打印到Console.WriteLine()。在第一次测试中,我可以在测试输出中看到来自后台线程的调试行。但接下来的测试不再显示此输出。
如果我在测试方法self中调用Console.WriteLine(),那么这将在测试输出中看到。我已经调试它和测试调用
但我只看到测试的输出而不是后台线程的输出。
看起来NUnit已经将捕获范围保存在线程上下文中。
如何从所有后台线程获取控制台输出?
答案 0 :(得分:2)
因为我们的库可以选择重定向日志输出,所以我们可以在测试中进行以下操作:
[SetUp]
public void FixtureSetUp()
{
MyLibrary.Console = TestContext.Out;
}
这不是一个好的解决方案。
答案 1 :(得分:0)
这取决于您正在使用的NUnit框架的特定运行时构建。有关文本捕获的信息在NUnit的TestExecutionContext
中维护,在不同的版本中以不同方式存储。
对于所有桌面版本(.NET 2.0,3.5,4.0和4.5),当前TestExecutionContext
保留在CallContext
中。由于TestExecutionClass
实现ILogicalThreadAffinative
,因此在创建新线程时,上下文会跟随测试。
对于我们的两个.NET Standard版本(1.3和1.6),上下文保留在线程本地存储中,因此不会跟随新线程的创建。当存在.NET Standard 2.0版本时,这是我们希望克服的限制。