如何解决如何配置xUnit测试以与NLog一起使用?
要在测试类中启用输出,如以下答案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?
解决方法
您可以创建一个自定义的 NLog 目标来写入 Xunit 的 ITestOutputHelper
:
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
设为抽象/基类并编写其他测试类来继承它。
您可以使用 NLog MethodCallTarget 来调用 testOutputHelper
:
public class NLoggedTest
{
public NLoggedTest(ITestOutputHelper testOutputHelper)
{
var target = new NLog.Targets.MethodCallTarget("Xunit",(evt,args) => testOutputHelper.WriteLine(evt.FormattedMessage + evt.Exception?.ToString()));
var config = new LoggingConfiguration();
config.LoggingRules.Add(new LoggingRule("*",target));
LogManager.Configuration = config;
}
// your tests/facts/theories here
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。