如何解决如何为AutoFixture创建不带ID的通用模型?
我正在使用Autofixture为XUnit中的测试自动生成数据。
目前,我有以下定制方法-这是ICustomization的实现:
public void Customize(IFixture fixture)
{
fixture.Customize<Product>(composer =>
composer.Without(e => e.Id));
}
是否可能具有通用类型-例如,我可以传递任何模型而不是产品?
解决方法
这应该可以通过使用自定义标本生成器来实现:
public class NoIdSpecimenBuilder : ISpecimenBuilder
{
public object Create(object request,ISpecimenContext context)
{
var propertyInfo = request as System.Reflection.PropertyInfo;
if (propertyInfo != null &&
propertyInfo.Name.Equals("Id"))
{
return new OmitSpecimen();
}
var fieldInfo = request as System.Reflection.FieldInfo;
if (fieldInfo != null &&
fieldInfo.Name.Equals("Id"))
{
return new OmitSpecimen();
}
return new NoSpecimen();
}
}
这将阻止自动固定为所有名称为“ Id”的属性生成值。
上面的代码是来自https://thomasardal.com/customizations-for-autofixture-my-new-best-friend/
的经过稍微编辑的示例我添加了不仅可以忽略属性,而且还可以忽略字段的功能。 (如果您确定始终使用属性而从不使用字段,则可以删除此部分)
哦,将标本制作工具添加到自动夹具中,如下所示:
fixture.Customizations.Add(new NoIdSpecimenBuilder());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。