如何在`IClassFixture`中获取`ITestOutputHelper`?

问题描述 投票:0回答:1

将 xUnit 与 asp.net 结合使用,我在不同的固定装置中隔离了一些测试依赖项,这些固定装置应该是全局的(它们执行可以在多个测试之间共享的测试设置);但不止一次我需要在这些设备上写入一些日志来调试某些情况。

样本是:

public class UnitTest(InterestingFixture f): IClassFixture<InterestingFixture> {
    [Fact]
    public void Test() {
       var data = f.GetData();
       // do something with data...
    }
}

public class InterestingFixture {
  public InterestingFixture() {
    // performs some initialization which I want to log to the test output
  }
}

与上面相同,我希望

InterestingFixture
获取
ITestOutputHelper
的实例,以便我可以向输出写入一些内容。我尝试将
ITestOutputHelper
添加到其构造函数中,但 xUnit 似乎没有在
IClassFixture
上注入任何内容。

我可以手动实例化 InterestingFixture,但它会删除 xUnit 给出的单例属性。

我怎样才能做到这一点? xUnit 支持吗?

我使用的是 xUnit 2.8。

.net-core xunit.net
1个回答
0
投票

不确定这是否正是您想要完成的任务,但是您的固定装置类可以存储日志并让您的测试类打印它们。像这样:

public class TestFixture : IAsyncLifetime
{
    private readonly StringBuilder _sb = new();
    public string Logs => _sb.ToString();

    public Task InitializeAsync()
    {
        _sb.AppendLine("Hello World!");
        return Task.CompletedTask;
    }

    public Task DisposeAsync() => Task.CompletedTask;
}

public class UnitTest : IClassFixture<TestFixture>
{
    private readonly TestFixture _fixture;
    private readonly ITestOutputHelper _output;

    public UnitTest(TestFixture fixture, ITestOutputHelper output)
    {
        _fixture = fixture;
        _output = output;

        _output.WriteLine(_fixture.Logs);
    }

    [Fact]
    public void Test1()
    {
        // run test
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.