将 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。
不确定这是否正是您想要完成的任务,但是您的固定装置类可以存储日志并让您的测试类打印它们。像这样:
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
}
}