5

我正在使用 nBuilder 填充对象图,但它仅填充值类型。我希望它填充引用类型(相关对象)。

http://nbuilder.org/

4

3 回答 3

6

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"));
于 2011-12-08T06:03:07.433 回答
1

这在 NBuilder 中是不可能的。

不过有一个手工制作的工具本文包含递归调用 NBuilder 以创建填充根对象的引用和集合属性的对象(向下到给定深度)的代码片段:

var recursiveObjectBuilder = new RecursiveObjectBuilder(graphDepth: 2, listSize: 3);

var complexObject = recursiveObjectBuilder.CreateGenericObject<ComplexType>(recursive:true);

Assert.NotNull(complexObject.ReferenceToOtherObject);
int someValue = complexObject.ReferenceToOtherObject.SomeValue;
于 2019-10-16T09:34:08.453 回答
1

我发现 NBuilder 的一个限制是它以这种方式为字符串生成的数据是基于属性名称,例如 Name1、Street1、Zipcode1,如上所示。我发现自己在使用 .Phrase() 但它没有生成合理的随机数据,并且必须将电子邮件等项目拼凑在一起。

您可以通过此处的 nuget链接下载 Faker.Net,或使用 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();

这篇博文详细介绍了更多示例。

于 2015-11-06T11:52:19.693 回答