我正在使用 nBuilder 填充对象图,但它仅填充值类型。我希望它填充引用类型(相关对象)。
问问题
3362 次
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 回答