Автофиксирование: PropertyData и гетерогенные параметры
Учитывая следующий тест:
[Theory]
[PropertyData("GetValidInputForDb")]
public void GivenValidInputShouldOutputCorrectResult(
string patientId
, string patientFirstName
)
{
var fixture = new Fixture();
var sut = fixture.Create<HtmlOutputBuilder>();
sut.DoSomething();
// More code
}
Я хочу инкапсулировать создание осветителей в своем собственном классе, что-то похожее на:
[Theory]
[CustomPropertyData("GetValidInputForDb")]
public void GivenValidInputShouldOutputCorrectResult(
string patientId
, string patientFirstName
, HtmlOutputBuilder sut
)
{
sut.DoSomething();
// More code
}
Проблема в том, что я использую PropertyData
и последний предоставляет два входных параметра. Тот факт, что я пытаюсь автоматически создать свой прибор в качестве параметра, вызывает исключение.
Вот CustomPropertyData:
public class CustomPropertyDataAttribute : CompositeDataAttribute
{
public CustomPropertyDataAttribute(string validInput)
:base(new DataAttribute[]
{
new PropertyDataAttribute(validInput),
new AutoDataAttribute(new Fixture()
.Customize(new HtmlOutpuBuilderTestConvention() )),
})
{
}
}
Какие варианты решения этой проблемы?
1 ответ
Решение
Вам необходимо предоставить данные PropertyDataAttribute
как показано ниже:
public static IEnumerable<object[]> GetValidInputForDb
{
get
{
yield return new object[]
{
"123",
"abc"
};
}
}
patientId
значение будет 123 г. patientFirstName
значение будет abc, а значение SUT будет автоматически предоставлено AutoFixture.
CustomPropertyDataAttribute
выглядит хорошо.