mez*_*oid 2 design-patterns builder-pattern c#-3.0
我已经创建了一个数据构建器,以便在我的单元测试中创建测试数据.我的数据构建器为所有属性创建默认值,以便使用它们的测试只需指定适用于测试的属性.
请考虑以下构建器:
public class CustomerBuilder
{
public int id = 0;
public Order order = new OrderBuilder().Build();
public CustomerBuilder WithId(int id)
{
this.id = id;
return this;
}
public CustomerBuilder WithOrder(Order order)
{
this.order = order;
return this;
}
public Customer Build()
{
return new Customer(id, order);
}
}
Run Code Online (Sandbox Code Playgroud)
通过这样做,如果我需要在测试中创建一个客户,其中id对我很重要但订单无关紧要,我可以按如下方式创建对象:
Customer c = new CustomerBuilder()
.WithId(99)
.Build();
Run Code Online (Sandbox Code Playgroud)
这是一个好主意吗?或者,为什么不应该假设应该如何构建非原始属性?
这是一个好主意,被称为测试数据生成器模式:)
FWIW,我创建了一个名为AutoFixture的通用测试数据生成器.这将使您能够简单地写
var customer = new Fixture()
.Build<Customer>()
.With(c => c.Id, 99)
.CreateAnonymous();
Run Code Online (Sandbox Code Playgroud)
通过使用AutoFixture,您不需要编写和维护大量自定义测试数据构建器,但是否则这是非常值得做的事情.