AutoMoq уважать MaxLengthAttribute
Я использую AutoFixture с AutoMoq для генерации и настройки Mock для интерфейса. Этот интерфейс использует MaxLength
атрибут для указания максимальной длины каждого свойства.
Как я могу заставить сгенерированный макет уважать MaxLength
приписывать.
Пожалуйста, учтите, что у меня есть загрузка свойств, использующих этот атрибут? (не только один, как в этом примере).
Код для создания макета выглядит так:
var fixture = new Fixture();
fixture.Customize(new AutoMoqCustomization() { ConfigureMembers = true });
var my = fixture.Create<IMyClass>();
где MyClass:
public interface IMyClass()
{
[MaxLength(40)]
public string Name { get; set; }
...
... more properties using the MaxLenght attribute
...
}
Я попытался сделать конструктор пользовательских образцов следующим образом:
public class MaxLenghtSpecimenBuilder : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
var pi = request as PropertyInfo;
if (pi == null || pi.PropertyType != typeof(string))
{
return new NoSpecimen();
}
var maxLengthAttribute = (MaxLengthAttribute)Attribute.GetCustomAttribute(pi, typeof(DescriptionAttribute));
if (maxLengthAttribute != null)
{
return new ConstrainedStringGenerator().Create(new ConstrainedStringRequest(maxLengthAttribute.Length), context);
}
return new NoSpecimen();
}
}
для того, чтобы добавить его в светильник с вызовом fixture.Customizations.Add(new MaxLenghtSpecimenBuilder());
Но это не работает. Это не получает пользовательский атрибут. Всегда возвращает ноль.