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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With