Как автоматически создавать дочерние коллекции с помощью NBuilder? - PullRequest
4 голосов
/ 31 января 2012

Для следующих классов:

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 Ответ

8 голосов
/ 31 января 2012

Поскольку вы не привязаны к NBuilder, с помощью AutoFixture вы можете добавить соглашения для работы с коллекциями .

Например, чтобы создать экземпляр отдела с 10 сотрудниками, вы можете сделать это:

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

var dep = fixture.CreateAnonymous<Department>();

Это может выглядеть примерно как тот же объем кода, но он масштабируется намного лучше, поскольку вам не нужно добавлять больше кода для заполнения большего количества коллекций - это просто происходит по соглашению.

В AutoFixture 3.0 по умолчанию будут использоваться соглашения для коллекций, что означает, что вам даже не нужно добавлять MultipleCustomization.

...