gpt4 book ai didi

c# - 是否可以让 xUnit 创建的 ITestOutputHelper 在 AutoFixture 上下文中可用?

转载 作者:行者123 更新时间:2023-11-30 12:40:19 30 4
gpt4 key购买 nike

是否可以让 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())
{
}
}
}

最佳答案

正如 Mark Seemann 在评论中预见的那样,它在当前版本 (v2.1) 中不受支持,并且没有可见的扩展点。因此,它可能会添加到 future versions 中.

有人建议牺牲 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();
}
}

关于c# - 是否可以让 xUnit 创建的 ITestOutputHelper 在 AutoFixture 上下文中可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42181536/

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