我正在使用 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。