使用 Serilog 静态记录器将日志输出到 Xunit

Kri*_*tel 9 logging integration-testing unit-testing xunit serilog

我在我的项目中使用 serilog 使用静态记录器方法 - 能够在我的类库上调用 Log.X 而不是在任何地方注入记录器类,这很好也很容易。

但是,当涉及到单元/集成测试时,如果测试失败,那么查看类库中的错误日志将非常有益(对于集成测试更是如此)。

因为我没有将 ILogger 注入我的类(由于使用静态记录器),所以我无法创建将输出写入测试日志的模拟测试记录器。

有没有人设法使用 Serilog 全局(静态)记录器将消息输出到 XUnit?

小智 12

Serilog.Sinks.XUnit NuGet包可以很容易地做到这一点。在您的项目中引用 nuget。然后就可以在测试中使用静态记录器了:

using Serilog;
using Xunit;
using Xunit.Abstractions;

namespace XunitToSerilog
{
    public class SampleTest
    {
        public SampleTest(ITestOutputHelper output)
        {
            Log.Logger = new LoggerConfiguration()
            // add the xunit test output sink to the serilog logger
            // https://github.com/trbenning/serilog-sinks-xunit#serilog-sinks-xunit
            .WriteTo.TestOutput(output)
            .CreateLogger();
        }

        [Fact]
        public void Test1()
        {
            Log.Information("goes to test output");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这里 Serilog+xUnit 的初始化发生在测试类构造函数中。那么你必须在每个测试类文件中编写相同的初始化逻辑吗?是否可以在全局程序入口点执行此操作? (2认同)