c# - 如何为 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();
}
}
这将阻止 autofixture 尝试为所有名为“Id”的属性生成值。
上面的代码是一个稍微编辑过的例子:https ://thomasardal.com/customizations-for-autofixture-my-new-best-friend/
我添加了不仅可以忽略属性,还可以忽略字段的功能。(如果你确定你总是使用属性而不是字段,你可以删除这部分)
哦,标本生成器被添加到自动夹具中,如下所示:
fixture.Customizations.Add(new NoIdSpecimenBuilder());
推荐阅读
- python - 使用函数更改变量名称
- python - Python 请求正文与我作为正文的内容不匹配
- android - 如何在 Android 应用小部件上禁用列表视图滚动
- linux - “# awk '/open/{print $2}' hostdiscovery.gnmap > livehosts.txt”需要一个 Windows Nmap 行
- sql - SQL查询获取在两个不同季度购买相同产品的客户 - 日期范围
- typescript - 如何在打字稿中使用泛型类型和联合类型
- html - 过渡 2s 不适用于线性梯度()
- javascript - 无法在我的快速博客中显示“用户名”发布的内容?
- graphql - Github GraphQL API 获取特定日期的问题计数
- javascript - 显示部分时增加数字