c# - 有没有办法查看 .NET Core 单元测试中生成的日志消息?

标签 c# unit-testing .net-core xunit

我在 .NET Core 中有一个带有单元测试的 C# 项目。为了在测试期间更好地检查代码流,我真的很想查看代码库中内置的 NLog 消息的输出。

我正在使用 XUnit,并且我知道由于并行测试执行,XUnit 已经不再使用控制台消息。对于我想要使用 ITestOutputHelper 完成的事情,不会有太大帮助。

有没有办法让 NLog 日志记录包含在测试输出中?

最佳答案

我用的是这样的:

namespace Tests.Builders
{
    internal static class Logging
    {
        public static ILogger DefaultLogger()
        {
            return NullLogger();
        }

        public static ILogger NullLogger()
        {
            return Substitute.For<ILogger>();
        }

        public static ILogger XUnitLogger(ITestOutputHelper testOutputHelper)
        {
            // Step 1. Create configuration object 
            var config = new LoggingConfiguration();

            // Step 2. Create targets and add them to the configuration 
            var consoleTarget = new XUnitTarget(testOutputHelper);
            config.AddTarget("xunit", consoleTarget);

            // Step 3. Set target properties 
            consoleTarget.Layout = @"${date:format=HH\:mm\:ss} ${logger} ${message}";

            // Step 4. Define rules
            var rule1 = new LoggingRule("*", LogLevel.Trace, consoleTarget);
            config.LoggingRules.Add(rule1);

            // Step 5. Activate the configuration
            LogManager.Configuration = config;

            return LogManager.GetLogger("");
        }
    }

    [Target("XUnit")]
    public sealed class XUnitTarget : TargetWithLayout
    {
        private readonly ITestOutputHelper _output;

        public XUnitTarget(ITestOutputHelper testOutputHelper)
        {
            _output = testOutputHelper;
        }

        protected override void Write(LogEventInfo logEvent)
        {
            string logMessage = this.Layout.Render(logEvent);

            _output.WriteLine(logMessage);
        }
    }
}

public class SomeTests
{
    private readonly ITestOutputHelper _output;

    public SomeTests(ITestOutputHelper output)
    {
        _output = output;
    }

    [Fact]
    public void Lets_see_some_output()
    {
        var foo = new Foo(Logging.XUnitLogger(_output));

        var result = foo.ExecuteSomething();

        Assert.Equal(true, result);
    }
}

关于c# - 有没有办法查看 .NET Core 单元测试中生成的日志消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41709945/

相关文章:

c# - 写入二进制多字节数组消息(大端)(.Net C#)

unit-testing - Mocking : Unit test question 中的依赖项太多

c# - 为 mac 制作一个自包含的可执行文件

c# - 这种签名 URL 的实现是否相当安全?

.net-core - 比较两个字符串列表的函数

c# - 读取 AT 命令结果代码

c# - 一圈还是两圈? (如何阅读 IL)

unit-testing - 单元测试理念

java - 从java中的任意字符获取VK int

c# - 如何测量我的 C# 应用程序使用的 FLOPS?