AutoFixture:PropertyData和异构参数

Dav*_*idS 5 c# xunit.net autofixture

鉴于以下测试:

[Theory]
[PropertyData("GetValidInputForDb")]
public void GivenValidInputShouldOutputCorrectResult(
    string patientId
    , string patientFirstName
)
{
    var fixture = new Fixture();          

    var sut = fixture.Create<HtmlOutputBuilder>();

    sut.DoSomething();
    // More code
}
Run Code Online (Sandbox Code Playgroud)

我想将夹具创建封装在自己的类中,类似于:

[Theory]
[CustomPropertyData("GetValidInputForDb")]
public void GivenValidInputShouldOutputCorrectResult(
    string patientId
    , string patientFirstName
    , HtmlOutputBuilder sut
)
{
    sut.DoSomething();
    // More code
}
Run Code Online (Sandbox Code Playgroud)

问题是我正在使用PropertyData,后者提供两个输入参数.事实上,我正在尝试自动创建我的夹具作为参数导致异常.

这是CustomPropertyData:

public class CustomPropertyDataAttribute : CompositeDataAttribute
{
    public CustomPropertyDataAttribute(string validInput)
        :base(new DataAttribute[]
            {
                new PropertyDataAttribute(validInput),
                new AutoDataAttribute(new Fixture()
                    .Customize(new HtmlOutpuBuilderTestConvention() )), 
            })
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以解决这个问题?

Nik*_*nis 3

PropertyDataAttribute您需要向以下提供数据:

public static IEnumerable<object[]> GetValidInputForDb 
{
    get
    {
        yield return new object[]
        {
            "123", 
            "abc"
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

该patientId值将为123,该patientFirstName值将为abc,并且 SUT 值将由 AutoFixture 自动提供。

看起来CustomPropertyDataAttribute不错。