gpt4 book ai didi

.net - 如何在 xunit2 中捕获 log4net 输出

转载 作者:行者123 更新时间:2023-12-02 13:26:57 25 4
gpt4 key购买 nike

我已阅读 http://xunit.github.io/docs/capturing-output.html它似乎适用于在测试运行期间使我的测试输出特定消息,但我真的希望能够捕获已经集成到我正在测试的类中的 log4net 输出。

过去,我设置了 log4net 来使用 TraceLogger,并且测试框架能够将输出与测试关联起来。 (不同的测试框架)。如何以某种方式将 log4net 输出关联到 Xunit IOutputHelper?

最佳答案

这就是我想出的答案

这是一个我可以让我的测试类继承的类:

   public class LogOutputTester:IDisposable
{
private readonly IAppenderAttachable _attachable;
private TestOutputAppender _appender;

protected LogOutputTester(ITestOutputHelper output)
{
log4net.Config.XmlConfigurator.Configure();
var root = ((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root;
_attachable = root;

_appender = new TestOutputAppender(output);
if (_attachable != null)
_attachable.AddAppender(_appender);
}

/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
public void Dispose()
{
_attachable.RemoveAppender(_appender);
}
}

这是我在上面的帮助器中引用的自定义 Appender:

 public class TestOutputAppender : AppenderSkeleton
{
private readonly ITestOutputHelper _xunitTestOutputHelper;

public TestOutputAppender(ITestOutputHelper xunitTestOutputHelper)
{
_xunitTestOutputHelper = xunitTestOutputHelper;
Name = "TestOutputAppender";
Layout = new PatternLayout("%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n");
}

protected override void Append(LoggingEvent loggingEvent)
{
_xunitTestOutputHelper.WriteLine(RenderLoggingEvent(loggingEvent));
}
}

这可以进行更多自定义以采用自定义布局或其他...

最后 - 我只是让我的测试类继承这个助手:

   public class MyTestClass:LogOutputTester
{
public EdgeClientTests(ITestOutputHelper output):base(output)
{
}
...

您也可以让您的测试直接访问输出对象...

关于.net - 如何在 xunit2 中捕获 log4net 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29680471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com