我正在使用nBuilder来填充对象图,但它只填充值类型。我希望它填充引用类型(相关对象)。
答案 0 :(得分:4)
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 :(得分:1)
我在NBuilder中发现的限制是它以这种方式为字符串生成的数据是基于属性名称,例如如上所示,Name1,Street1,Zipcode1。我发现自己使用.Phrase()但它没有生成合理的随机数据,而且像电子邮件这样的项目必须拼凑在一起。
您可以通过nuget link here or use Visual Studio下载Faker.Net,并将其作为构建命令的一部分创建模拟数据。然后你可以用它来构建你的Person模拟对象(再次使用Faker / NBuilder)。
sylius_taxation:
driver: doctrine/orm
classes:
tax_rate:
model: Acme\ShopBundle\Entity\TaxRate # Your tax rate entity.
This blog post详细介绍了一些例子。
答案 2 :(得分:0)
在NBuilder中是不可能的。
虽然有一个手工工具。 This article包含递归调用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;