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());

Но это не работает. Это не получает пользовательский атрибут. Всегда возвращает ноль.

0 ответов

Другие вопросы по тегам