【发布时间】:2021-09-07 00:39:12
【问题描述】:
我正在尝试通过 NLog 日志库从基于 .NET Core 3.1 的 xUnit 测试用例中输出一些日志消息。通过 NLog 进行日志记录在我的主应用程序中工作正常,但测试用例不会输出任何消息。
我认为我正在做这个相关问题中建议的一切:NLog works in ASP.NET Core App but not in .NET Core xUnit Test Project
但不知何故,我无法弄清楚缺少什么。我已将我的代码简化为一个看起来非常简单的最小示例,但仍然没有输出任何内容:
using NLog;
using NLog.Config;
using NLog.Targets;
using System;
using Xunit;
using Xunit.Abstractions;
namespace UnitTests
{
public class LoggingTest
{
public LoggingTest(ITestOutputHelper output)
{
this.output = output;
}
private readonly ITestOutputHelper output;
[Fact]
public void TestLog()
{
var target = new MemoryTarget {Layout = "${message}"};
LogManager.Configuration ??= new LoggingConfiguration();
LogManager.Configuration.AddRuleForAllLevels(target);
LogManager.GetCurrentClassLogger().Info("Hello, World!");
output.WriteLine("{0} line(s) logged:\n{1}", target.Logs.Count, String.Join("\n", target.Logs));
}
}
}
预期输出:
已记录 1 行:
你好,世界!
实际输出:
0 行记录:
作为进一步的跟踪,我在各个地方读到,如果 appsettings.json 文件的 Logging 部分中存在某些设置,NLog 只会在 .NET Core 3.1 项目中写入一些内容。我认为这部分也必须添加到我们的主应用程序的appsettings.json 文件中。
不过,我不确定如何将这些知识转移到单元测试中,因为它们似乎没有附带appsettings.json 文件。我尝试将 appsettings.json 主文件复制到单元测试的输出目录(我认为,这是从 ReSharper 中运行时它们的执行目录),但无济于事。
我错过了什么?
【问题讨论】:
标签: c# unit-testing .net-core nlog xunit