有没有办法在 .NET Core 的单元测试中查看生成的日志消息?
Posted
技术标签:
【中文标题】有没有办法在 .NET Core 的单元测试中查看生成的日志消息?【英文标题】:Is there way to see log messages generated in a unit test in .NET Core? 【发布时间】:2017-06-02 06:32:07 【问题描述】:我在 .NET Core 中有一个带有单元测试的 C# 项目。为了在测试期间更好地检查代码流,我真的很想看看代码库中内置的 NLog 消息的输出。
我正在使用 XUnit,并且我知道 XUnit 由于并行测试执行而远离了控制台消息。对于我想使用ITestOutputHelper
完成的工作不会有太大帮助。
有没有办法让 NLog 日志记录包含在测试输出中?
【问题讨论】:
【参考方案1】:我使用这样的东西:
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);
【讨论】:
以上是关于有没有办法在 .NET Core 的单元测试中查看生成的日志消息?的主要内容,如果未能解决你的问题,请参考以下文章
我正在为我的测试项目使用 MStest (.net core),有没有办法在失败时继续执行测试?