Mic*_*nov 8 c# xunit.net autofixture
是否可以让 xUnit 创建的 ITestOutputHelper 在 AutoFixture 上下文中可用?
在我的集成测试中,我使用 Builder 类,其中包含一些常规操作的辅助方法。为了隐藏类创建的复杂性,我使用自定义 AutoDataAttribute,因此我的测试将创建对象作为来自 AutoFixture 的测试方法参数。
现在我决定向 Builder 添加一些日志记录功能,但不知道如何将 ITestOutputHelper 从自定义 AutoDataAttribute 传递到 Builder 构造函数中。
using Ploeh.AutoFixture;
using Ploeh.AutoFixture.AutoNSubstitute;
using Ploeh.AutoFixture.Xunit2;
using Xunit;
using Xunit.Abstractions;
namespace XunitAutoFixtItestOutput
{
public class Class1Tests
{
private readonly ITestOutputHelper _output;
public Class1Tests(ITestOutputHelper output)
{
_output = output;
}
[Theory, DefaultAutoData]
public void UnitOfWork_StateUnderTest_ExpectedBehavior(Builder builder)
{
}
}
public class Builder
{
private readonly ITestOutputHelper _outputHelper;
public Builder(ITestOutputHelper outputHelper)
{
_outputHelper = outputHelper;
}
public void DoSomething()
{
_outputHelper.WriteLine("Something happened");
}
}
public class DefaultAutoData : AutoDataAttribute
{
public DefaultAutoData() : base(new Fixture().Customize(new DefaultCustomization()))
{
this.Fixture.Customize<Builder>(f => f.FromFactory(new Builder(??Where to get it from??)));
}
}
public class DefaultCustomization : CompositeCustomization
{
public DefaultCustomization() : base(new AutoConfiguredNSubstituteCustomization())
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如 Mark Seemann 在评论中预见到的那样,当前版本 (v2.1) 不支持它,并且没有可见的扩展点。因此,它可能会在未来的版本中添加。
建议牺牲该属性AutoData(至少在扩展 xUnit 之前)并fixture在测试构造函数中进行配置:
public class Class1Tests
{
private readonly Fixture fixture;
public Class1Tests(ITestOutputHelper output)
{
this.fixture = new Fixture();
this.fixture.Inject(output);
}
[Fact]
public void UnitOfWork_StateUnderTest_ExpectedBehavior()
{
var builder = this.fixture.Create<Builder>();
builder.DoSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5137 次 |
| 最近记录: |