AutoFixture:PropertyData和异构参数

鉴于以下测试:

[Theory] [PropertyData("GetValidInputForDb")] public void GivenValidInputShouldOutputCorrectResult( string patientId , string patientFirstName ) { var fixture = new Fixture(); var sut = fixture.Create(); sut.DoSomething(); // More code } 

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

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

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

这是CustomPropertyData:

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

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

您需要向PropertyDataAttribute提供数据,如下所示:

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

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

CustomPropertyDataAttribute看起来不错。