让我们考虑同一个非常简单实体的两个版本(一个具有只读属性):
public class Client
{
public Guid Id { get; set; }
public string Name { get; set; }
}
对比
public class Client
{
public Client(Guid id, string name)
{
this.Id = id;
this.Name = name;
}
public Guid Id { get; }
public string Name { get; }
}
当我尝试使用 Autofixture 时,它会按预期正常工作。当我尝试使用预定义参数之一时,问题就开始了。with()
方法:
var obj = this.fixture.Build<Client>().With(c => c.Name, "TEST").Build();
这将引发错误
System.ArgumentException:属性“名称”是只读的。
但似乎 Autofixture 知道如何使用构造函数!而且似乎实际Build<>()
方法不是创建对象的实例Create()
!如果 build 只是准备构建器,设置属性,然后 Create 将实例化对象,它将与只读属性一起正常工作。
那么为什么在这里使用这种(误导性的)策略呢?我在这里找到了一个答案,说明它是通过测试来放大反馈,但我看不到使用它的用处,FromFactory()
尤其是当参数列表很广泛时。Build()
从一个方法到另一个方法移动对象实例化不是Create()
更直观吗?