Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
653 views
in Technique[技术] by (71.8m points)

c# - AutoFixture: PropertyData and heterogeneous parameters

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...