Как автоматически создавать дочерние коллекции с помощью 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; }
}
С помощью NBuilder я могу создать объект отдела и назначить 10 сотрудников следующим образом:
var employees = Builder<Employee>.CreateListOfSize(10).Build();
var department = Builder<Department>
.CreateNew()
.With(d=>d.Employees = employees)
.Build();
Это работает с небольшим количеством коллекций, но это становится громоздким с большой. Есть ли способ, чтобы NBuilder автоматически заполнял все коллекции в объекте?
Кстати, я не привязан к NBuilder, так что если есть еще одна бесплатная библиотека, которая сделает это, я буду более чем рад переключиться.
1 ответ
Поскольку вы не привязаны к NBuilder, с помощью AutoFixture вы можете добавлять соглашения для работы с коллекциями.
Например, чтобы создать экземпляр отдела с 10 сотрудниками, вы можете сделать это:
var fixture = new Fixture().Customize(new MultipleCustomization());
fixture.RepeatCount = 10;
var dep = fixture.CreateAnonymous<Department>();
Это может выглядеть примерно как тот же объем кода, но он масштабируется намного лучше, поскольку вам не нужно добавлять больше кода для заполнения большего количества коллекций - это просто происходит по соглашению.
В AutoFixture 3.0 соглашения для коллекций будут присутствовать по умолчанию, что означает, что вам даже не нужно добавлять MultipleCustomization.