AutoMoq尊重MaxLengthAttribute

时间:2018-04-12 10:26:08

标签: c# unit-testing autofixture castle-dynamicproxy automoq

我正在使用 AutoFixture AutoMoq 生成并配置模拟到界面。此接口使用MaxLength属性指定每个属性的最大长度。

如何使生成的mock尊重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());

将其添加到灯具中

但它不起作用。它没有获取自定义属性。它总是返回null。

0 个答案:

没有答案