Лучший способ решить эту проблему - создать основанный на соглашении генератор пользовательских значений , который назначает строковое представление анонимного числового значения определенному свойству, на основена его имя .
Итак, приведем пример, предполагая, что у вас есть такой класс:
public class Foo
{
public string StringThatReallyIsANumber { get; set; }
}
Генератор пользовательских значений будет выглядеть так:
public class StringThatReallyIsANumberGenerator : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
var targetProperty = request as PropertyInfo;
if (targetProperty == null)
{
return new NoSpecimen(request);
}
if (targetProperty.Name != "StringThatReallyIsANumber")
{
return new NoSpecimen(request);
}
var value = context.CreateAnonymous<int>();
return value.ToString();
}
}
Ключевым моментом здесь является то, что пользовательский генератор будет предназначаться только для свойств с именем StringThatReallyIsANumber
, что в данном случае является нашим соглашение .
Чтобы использовать его в своих тестах, вам просто нужно добавить его в свой экземпляр Fixture
через коллекцию Fixture.Customizations
:
var fixture = new Fixture();
fixture.Customizations.Add(new StringThatReallyIsANumberGenerator());
var anonymousFoo = fixture.CreateAnonymous<Foo>();