2010-12-06 42 views

回答

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

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

您可以通过nuget link here or use Visual Studio下载Faker.Net,并让它创建模拟数据作为构建命令的一部分。然后你可以用它来建立你的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(); 

This blog post一些细节更多的例子。