要在测试类中启用输出,如以下答案xUnit.net does not capture console output中所述您需要提供以下设置:
public class OutputTest
{
private readonly ITestOutputHelper _testOutputHelper;
public OutputTest(ITestOutputHelper testOutputHelper)
{
_testOutputHelper = testOutputHelper;
}
[Fact]
public void MyFact()
{
_testOutputHelper.WriteLine("Hello world!");
//this should result in writing to _testOutputHelper too
LogManager.GetCurrentClassLogger().Info("Hello world!");
}
}
如何将 _testOutputHelper 与 NLog 连接?当 NLog 完成一些日志记录(在应用程序或引用的库中)时,是否可以写入 ITestOutputHelper?
最佳答案
您可以创建写入 Xunit 的 ITestOutputHelper
的自定义 NLog 目标:
using NLog;
using NLog.Targets;
using Xunit.Abstractions;
namespace YourNamespace
{
/// <summary>
/// Writes log messages to Xunit's ITestOutputHelper.
/// </summary>
public class XunitLoggerTarget : TargetWithLayout
{
private readonly ITestOutputHelper helper;
public XunitLoggerTarget(ITestOutputHelper helper)
{
this.helper = helper;
}
protected override void Write(LogEventInfo logEvent)
{
var logMessage = Layout.Render(logEvent);
helper.WriteLine(logMessage);
}
}
}
然后,在您的 Xunit 测试类中,为 ITestOutputHelper
添加构造函数参数,并将 NLog 配置为使用 XunitLoggerTarget
:
using NLog;
using NLog.Config;
using Xunit.Abstractions;
namespace YourNamespace
{
public class NLoggedTest
{
public NLoggedTest(ITestOutputHelper testOutputHelper)
{
var config = new LoggingConfiguration();
var target = new XunitLoggerTarget(testOutputHelper);
config.AddTarget("Xunit", target);
config.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, target));
LogManager.Configuration = config;
}
// your tests/facts/theories here
}
}
您可以使 NLoggedTest
成为一个抽象/基类,并编写其他测试类来继承它。
关于c# - 如何配置 xUnit 测试以与 NLog 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63504353/