nBuilder только заполняет типы значений - PullRequest
4 голосов
/ 07 декабря 2010

Я использую nBuilder для заполнения графа объектов, но он только заполняет типы значений. Я хочу, чтобы он заполнял ссылочные типы (связанные объекты).

http://nbuilder.org/

Ответы [ 2 ]

4 голосов
/ 08 декабря 2011

NBuilder не поддерживает автоматическое заполнение ссылочных типов в настоящее время.

Однако вы можете делать то, что вам нужно, используя конструктор для создания каждого ссылочного типа.

На данный момент вы, вероятно, делаете это:

var person = Builder<Person>
    .CreateNew()
    .Build();

Assert.That(person.Name, Is.EqualTo("Name1"));
Assert.That(person.Address, Is.Null);

То, что вы хотите сделать, это:

var address = Builder<Address>
    .CreateNew()
    .Build();

var person2 = Builder<Person>
    .CreateNew()
    .With(x => x.Address = address)
    .Build();

Assert.That(person2.Name, Is.EqualTo("Name1"));
Assert.That(person2.Address, Is.Not.Null);
Assert.That(person2.Address.Street, Is.EqualTo("Street1"));
Assert.That(person2.Address.Zipcode, Is.EqualTo("Zipcode1"));
1 голос
/ 06 ноября 2015

Ограничение, которое я обнаружил в NBuilder, заключается в том, что данные, которые он генерирует для строк таким образом, состоят в том, что он основан на именах свойств, например Name1, Street1, Zipcode1, как вы видите выше. Я обнаружил, что использую .Phrase (), но он не генерирует разумных случайных данных, и такие элементы, как электронные письма, должны быть соединены вместе.

Вы можете скачать Faker.Net по ссылке nuget здесь или использовать Visual Studio , чтобы он создавал фиктивные данные как часть вашей команды сборки. Затем вы можете использовать его для создания макетов объектов Person (снова используя Faker / NBuilder).

var addresses = Builder<Address>.CreateListOfSize(20)
    .All()
        .With(c => c.Street = Faker.StreetName().First())
        .With(c => c.State = Faker.UsState().First())
        .With(c => c.ZipCode = Faker.ZipCode().First())
    .Build();

Это сообщение в блоге подробно описывает еще несколько примеров.

...