nBuilderを使用してオブジェクトグラフにデータを入力していますが、値の型のみを入力しています。参照型(関連オブジェクト)を入力する必要があります。
3 に答える
現時点では、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"));
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();
このブログ投稿では、さらにいくつかの例について詳しく説明しています。
これは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;