nBuilder只填充值类型

时间:2010-12-06 23:14:31

标签: c# nbuilder

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

http://nbuilder.org/

3 个答案:

答案 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;