如何使用NBuilder自动创建子集合?

Man*_*uel 4 .net nbuilder

鉴于以下课程:

class Department
{
    public String Name { get; set; }
    public IList<Employee> Employees { get; set; }
}
class Employee
{
    public String Name { get; set; }
    public String Address { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用NBuilder,我可以创建一个部门对象,并通过以下方式分配10名员工:

var employees = Builder<Employee>.CreateListOfSize(10).Build();
var department = Builder<Department>
    .CreateNew()
    .With(d=>d.Employees = employees)
    .Build();
Run Code Online (Sandbox Code Playgroud)

这适用于少量的集合,但是对于大型集合来说它很麻烦.有没有办法让NBuilder自动填充对象中的所有集合?

顺便说一句,我没有绑定NBuilder,所以如果有另一个免费的图书馆这样做,我会非常乐意切换.

Mar*_*ann 8

由于您没有绑定到NBuilder,因此使用AutoFixture可以添加用于处理集合的约定.

例如,要创建一个包含10名员工的Department实例,您可以这样做:

var fixture = new Fixture().Customize(new MultipleCustomization());
fixture.RepeatCount = 10;

var dep = fixture.CreateAnonymous<Department>();
Run Code Online (Sandbox Code Playgroud)

这可能看起来像大约相同数量的代码,但它更好地扩展,因为您不需要添加更多代码来填充更多集合 - 这只是通过约定发生的.

在AutoFixture 3.0中,默认情况下集合的约定将存在,这意味着您甚至不需要添加MultipleCustomization.