AutoFixture: PropertyData and heterogeneous parameters

拥有回忆 提交于 2019-11-28 08:00:36

问题


Given the following test:

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

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

    sut.DoSomething();
    // More code
}

I want to encapsulate fixture creation in its own class, something akin to:

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

The problem is that I'm using PropertyData and the latter is supplying two input parameters. The fact that I'm then trying to automatically create my fixture as a parameter is causing an exception.

Here is the CustomPropertyData:

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

    }
}

What are the options to resolve this?


回答1:


You need to supply data to the PropertyDataAttribute as below:

public static IEnumerable<object[]> GetValidInputForDb 
{
    get
    {
        yield return new object[]
        {
            "123", 
            "abc"
        };
    }
}

The patientId value will be 123, the patientFirstName value will be abc and the SUT value is going to be supplied automatically by AutoFixture.

The CustomPropertyDataAttribute looks good.



来源:https://stackoverflow.com/questions/16841414/autofixture-propertydata-and-heterogeneous-parameters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!