Owin TestServer 在测试时多次记录 - 我该如何解决这个问题?

Owin TestServer logs multiple times while testing - how can I fix this?

我正在尝试为 OWIN 服务编写单元测试,但是一旦我 运行 一次全部测试,我的测试中的任何日志语句都会开始重复,并且确实使构建服务器上的日志输出变得无用由于所有的噪音。我已将问题归结为一个非常简单的重现:

[TestFixture]
public class ServerTest
{
    [Test]
    public void LogOnce()
    {
        using (TestServer.Create(app => { }))
        {
            Debug.WriteLine("Log once");
        }
    }

    [Test]
    public void LogTwice()
    {
        using (TestServer.Create(app => { }))
        {
            Debug.WriteLine("Log twice");
        }
    }
}

如果我 运行 一次测试一个,我会得到预期的输出:

=> ServerTest.LogOnce
Log once

=> ServerTest.LogTwice
Log twice

如果我 运行 一次性完成所有测试,我会得到:

=> ServerTest.LogOnce
Log once

=> ServerTest.LogTwice
Log twice
Log twice

初始化 TestServer 一次即可解决问题,但我正在寻找一种解决方案,允许我继续实例化我选择的任意数量的 TestServer 实例。

这个 post 指出了 HostingEngine 如何默认使用 TraceListener 以及禁用它的方法: TraceListener in OWIN Self Hosting

有了这种洞察力,我追踪了 TestServer.Create 的源代码并确认它正在内部创建一个 HostingEngine,它打开一个 TraceListener,最终将结果输出到控制台。我已经确认该页面上投票最高(在撰写本文时)的修复程序适用于 TestServer,并且相信其他解决方案也有很好的选择。

解决这个问题既费时又烦人。很难发现并且不明显地连接一个选择退出。选择加入解决方案会更好。