如何为 AutoFixture 创建没有 Id 的通用模型?
How to create a Generic Model without Id for AutoFixture?
我正在使用 Autofixture 为我在 XUnit 中的测试自动生成数据。
目前,我有以下自定义方法 - 这是 ICustomization 的实现:
public void Customize(IFixture fixture)
{
fixture.Customize<Product>(composer =>
composer.Without(e => e.Id));
}
是否可以使用泛型类型 - 例如代替 Product,我可以在其中传递任何模型?
这应该可以通过使用自定义样本生成器来实现:
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();
}
}
这将阻止 autofixture 尝试为所有名为“Id”的属性生成一个值。
上面的代码是来自https://thomasardal.com/customizations-for-autofixture-my-new-best-friend/
的稍微编辑的示例
我添加了不仅可以忽略属性,还可以忽略字段的功能。 (如果你确定你总是使用属性而不是字段,你可以删除这部分)
哦,标本生成器是这样添加到自动夹具中的:
fixture.Customizations.Add(new NoIdSpecimenBuilder());
我正在使用 Autofixture 为我在 XUnit 中的测试自动生成数据。
目前,我有以下自定义方法 - 这是 ICustomization 的实现:
public void Customize(IFixture fixture)
{
fixture.Customize<Product>(composer =>
composer.Without(e => e.Id));
}
是否可以使用泛型类型 - 例如代替 Product,我可以在其中传递任何模型?
这应该可以通过使用自定义样本生成器来实现:
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();
}
}
这将阻止 autofixture 尝试为所有名为“Id”的属性生成一个值。
上面的代码是来自https://thomasardal.com/customizations-for-autofixture-my-new-best-friend/
的稍微编辑的示例我添加了不仅可以忽略属性,还可以忽略字段的功能。 (如果你确定你总是使用属性而不是字段,你可以删除这部分)
哦,标本生成器是这样添加到自动夹具中的:
fixture.Customizations.Add(new NoIdSpecimenBuilder());