NBuilder .NET(開発者向けの動作方法)
NBuilderはテストデータ生成を簡素化する.NETライブラリです。 開発者は流暢なインターフェースで複雑なオブジェクトグラフを簡単に作成できます。 人気のあるテスティングフレームワークとシームレスに統合された柔軟性、効率性を提供します。 この記事では、NBuilderの特徴、そのインストール方法、実際のコード例を通じてその機能を探ります。

NBuilderの特徴
- NBuilderはテストやモックの目的でオブジェクトの作成を簡素化するために設計されたC#のオープンソース.NETライブラリです。 開発者は異なるデータ型に基づいたデフォルトまたはカスタム指定の入力でオブジェクトを素早く生成できます。
- 単体テスト、機能テスト、統合テストに特に役立ちます。
- .NET組み込みデータ型や複雑なオブジェクトをテストするための不可欠なパッケージのひとつです。
- ランダムデータ生成に使用されます。 このオープンソースプロジェクトに貢献できます。
- NBuilderを使用することで、デフォルトのプロパティを簡単にオーバーライドし、カスタム設定を記述できます。
NBuilderのインストール
NuGetパッケージ管理コンソールでNBuilderをインストールするには、次のコマンドを使用します。
Install-Package NBuilder
上記のコマンドにより、すべての依存関係とともにNBuilderがインストールされます。

NBuilderの使用方法
NBuilderはオブジェクトを即座に作成するための流暢な方法を提供します。 まず、オブジェクトを作成するシンプルな例から始めましょう。
こちらはPerson Modelクラスのソースコードです。
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public bool IsMarried { get; set; }
}
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public bool IsMarried { get; set; }
}
Friend Class Person
Public Property Id() As Integer
Public Property Name() As String
Public Property Email() As String
Public Property IsMarried() As Boolean
End Class
例1:デフォルト値を使用したPersonオブジェクトの作成
// Create a new person object with default values using NBuilder
var person = Builder<Person>
.CreateNew()
.Build();
// By default, NBuilder can provide values like
// Id = 1, Name = Name1, Email = Email1, IsMarried = false
// Create a new person object with default values using NBuilder
var person = Builder<Person>
.CreateNew()
.Build();
// By default, NBuilder can provide values like
// Id = 1, Name = Name1, Email = Email1, IsMarried = false
' Create a new person object with default values using NBuilder
Dim person = Builder(Of Person) .CreateNew().Build()
' By default, NBuilder can provide values like
' Id = 1, Name = Name1, Email = Email1, IsMarried = false
サンプル画像

例2:カスタムビルダーを使用したオブジェクトの作成
こちらはカスタムプロパティを持つPersonオブジェクトを作成・設定するためにNBuilderを使用する方法の例です。
// Initialize a custom builder for the Person object with specific values
var customPersonBuilder = Builder<Person>.CreateNew()
.With(p => p.Name = "Tom")
.With(p => p.Email = "Tom@email.com");
// Build the custom person object with the specified properties
var objTom = customPersonBuilder.Build();
// Initialize a custom builder for the Person object with specific values
var customPersonBuilder = Builder<Person>.CreateNew()
.With(p => p.Name = "Tom")
.With(p => p.Email = "Tom@email.com");
// Build the custom person object with the specified properties
var objTom = customPersonBuilder.Build();
' Initialize a custom builder for the Person object with specific values
Dim customPersonBuilder = Builder(Of Person).CreateNew().With(Sub(p) p.Name = "Tom").With(Sub(p) p.Email = "Tom@email.com")
' Build the custom person object with the specified properties
Dim objTom = customPersonBuilder.Build()
上記のコードはカスタムプロパティを持つ新しいPersonオブジェクトを作成します。 Personオブジェクト用にcustomPersonBuilderを初期化し、Nameを "Tom" に、Emailを "Tom@email.com" に設定します。 最終的にそのオブジェクトを構築し、objTomに割り当てます。
例3:デフォルト値を持つPersonオブジェクトリストの作成
// Create a list of 10 Person objects with default values using NBuilder
var personList = Builder<Person>
.CreateListOfSize(10)
.Build();
// Create a list of 10 Person objects with default values using NBuilder
var personList = Builder<Person>
.CreateListOfSize(10)
.Build();
' Create a list of 10 Person objects with default values using NBuilder
Dim personList = Builder(Of Person) .CreateListOfSize(10).Build()
サンプル画像

ここでは、personListは10個のオブジェクトをデフォルトの値で持ち、それらを出力します。
// Creating a list of 10 Person objects with default values
var personList = Builder<Person>
.CreateListOfSize(10)
.Build();
// Print details of each Person object in the list
foreach (var person in personList)
{
Console.WriteLine($"{person.Id}, {person.Name}, {person.Email}, {person.IsMarried}");
}
// Creating a list of 10 Person objects with default values
var personList = Builder<Person>
.CreateListOfSize(10)
.Build();
// Print details of each Person object in the list
foreach (var person in personList)
{
Console.WriteLine($"{person.Id}, {person.Name}, {person.Email}, {person.IsMarried}");
}
' Creating a list of 10 Person objects with default values
Dim personList = Builder(Of Person) .CreateListOfSize(10).Build()
' Print details of each Person object in the list
For Each person In personList
Console.WriteLine($"{person.Id}, {person.Name}, {person.Email}, {person.IsMarried}")
Next person

例4:生成されたオブジェクトのカスタマイズ
作成されたオブジェクトをカスタマイズする必要がある場合もあります。 With() メソッドを使用してオブジェクトの値をカスタマイズすることもできます。
// Customize properties for all Person objects in the list
var personList = Builder<Person>
.CreateListOfSize(10)
.All()
.With(p => p.Name = "Kim")
.With(p => p.Email = "abc@email.com")
.With(p => p.IsMarried = false)
.Build();
// Customize properties for all Person objects in the list
var personList = Builder<Person>
.CreateListOfSize(10)
.All()
.With(p => p.Name = "Kim")
.With(p => p.Email = "abc@email.com")
.With(p => p.IsMarried = false)
.Build();
' Customize properties for all Person objects in the list
Dim personList = Builder(Of Person) .CreateListOfSize(10).All().With(Sub(p) p.Name = "Kim").With(Sub(p) p.Email = "abc@email.com").With(Sub(p) p.IsMarried = False).Build()
これにより、各オブジェクトのデフォルト値が Name = "Kim"、Email = "abc@email.com"、IsMarried = false に上書きされた personList が作成されます。
例5:リアルなランダムデータを使用したPersonオブジェクトリストの作成
Person Listでリアルなデータ値を得るために、Faker Library .NETを使用してリアルなデータを生成できます。
// Creating a list of Person objects with random yet realistic values using Faker
var personList = Builder<Person>
.CreateListOfSize(10)
.All()
.With(p => p.Name = Faker.Name.FullName())
.With(p => p.Id = Faker.RandomNumber.Next(20, 60))
.Build();
// Creating a list of Person objects with random yet realistic values using Faker
var personList = Builder<Person>
.CreateListOfSize(10)
.All()
.With(p => p.Name = Faker.Name.FullName())
.With(p => p.Id = Faker.RandomNumber.Next(20, 60))
.Build();
' Creating a list of Person objects with random yet realistic values using Faker
Dim personList = Builder(Of Person) .CreateListOfSize(10).All().With(Sub(p) p.Name = Faker.Name.FullName()).With(Sub(p) p.Id = Faker.RandomNumber.Next(20, 60)).Build()
例6:連続データを使用したPersonオブジェクトリストの作成
連続したデータを持つオブジェクトを生成する必要があるときもあります。 NBuilder .NETはDoメソッドを使用してこれをサポートします。
// Creating a list of 10 sequential Person objects using NBuilder
var personList = Builder<Person>.CreateListOfSize(10)
.All()
.Do((p, i) => p.Id = 501 + i)
.Do((p, i) => p.Name = $"Person {i + 1}")
.Build();
// Creating a list of 10 sequential Person objects using NBuilder
var personList = Builder<Person>.CreateListOfSize(10)
.All()
.Do((p, i) => p.Id = 501 + i)
.Do((p, i) => p.Name = $"Person {i + 1}")
.Build();
' Creating a list of 10 sequential Person objects using NBuilder
Dim personList = Builder(Of Person).CreateListOfSize(10).All().Do(Sub(p, i) p.Id = 501 + i).Do(Sub(p, i) p.Name = $"Person {i + 1}").Build()
ここで、All() メソッドは、後続の操作がメモリ内に作成された 10 個の person オブジェクトすべてに適用されるようにします。 Do() メソッドは、各 Person オブジェクトに対して Action デリゲートを実行します。 この設定では、Id プロパティを 501 から順番に割り当て、同様に各人物に"Person 1"から"Person 10"まで順番に名前を付けます。

例7:Xunitを使用した単体テストでのNBuilder
.NET内でのNBuilderは特にテスト環境で広く使用され、開発者がテストのためにリアルで多様なデータを生成する必要がある場合に利用されます。 複雑なオブジェクトでテストを簡単かつ保守しやすくし、開発者がlambda式やデリゲート関数を使用してカスタム初期化ロジックを定義することが可能で、効率的かつ柔軟なテストデータ生成に興味のある人々に対応できます。
単体テストのためのモデルクラスとサービス
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public bool IsMarried { get; set; }
}
class PersonService
{
public string GetPersonEmail(Person person)
{
return person.Email;
}
}
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public bool IsMarried { get; set; }
}
class PersonService
{
public string GetPersonEmail(Person person)
{
return person.Email;
}
}
Friend Class Person
Public Property Id() As Integer
Public Property Name() As String
Public Property Email() As String
Public Property IsMarried() As Boolean
End Class
Friend Class PersonService
Public Function GetPersonEmail(ByVal person As Person) As String
Return person.Email
End Function
End Class
ここで、Person クラスには、IsMarried などのいくつかのプロパティがあり、PersonService には、指定された Person の電子メールを返すメソッド GetPersonEmail() が含まれています。
テストクラスとテストデータ
using Xunit;
public class PersonTests
{
[Fact]
public void GetPersonEmail_ReturnCorrectEmail()
{
// Arrange
var service = new PersonService();
string expectedEmail = "Tom@email.com";
// Create a person with specific name and email using NBuilder
var person = Builder<Person>.CreateNew()
.With(p => p.Name = "Tom")
.With(p => p.Email = "Tom@email.com")
.Build();
// Act
var actualEmail = service.GetPersonEmail(person);
// Assert
Assert.Equal(expectedEmail, actualEmail);
}
}
using Xunit;
public class PersonTests
{
[Fact]
public void GetPersonEmail_ReturnCorrectEmail()
{
// Arrange
var service = new PersonService();
string expectedEmail = "Tom@email.com";
// Create a person with specific name and email using NBuilder
var person = Builder<Person>.CreateNew()
.With(p => p.Name = "Tom")
.With(p => p.Email = "Tom@email.com")
.Build();
// Act
var actualEmail = service.GetPersonEmail(person);
// Assert
Assert.Equal(expectedEmail, actualEmail);
}
}
Imports Xunit
Public Class PersonTests
<Fact>
Public Sub GetPersonEmail_ReturnCorrectEmail()
' Arrange
Dim service = New PersonService()
Dim expectedEmail As String = "Tom@email.com"
' Create a person with specific name and email using NBuilder
Dim person = Builder(Of Person).CreateNew().With(Sub(p) p.Name = "Tom").With(Sub(p) p.Email = "Tom@email.com").Build()
' Act
Dim actualEmail = service.GetPersonEmail(person)
' Assert
Assert.Equal(expectedEmail, actualEmail)
End Sub
End Class
この単体テストでは、PersonService クラスの GetPersonEmail メソッドが、期待される電子メール"Tom@email.com"を含む Person オブジェクトの電子メール アドレスを正しく返すことを確認します。 Arrange-Act-Assertパターンを使用してテストデータを設定し、メソッドを実行し、その後、実際の結果が期待される結果と一致していることを確認します。
NBuilderとIronPDFの統合
IronPDFについて学ぶは.NETアプリケーション内でHTMLからPDFを作成するために設計された強力なC#ライブラリです。 その直感的なAPIを通じて、開発者は請求書、レポート、インタラクティブなフォームを生成するかどうかに関係なく、自分のプロジェクトにシームレスにPDF機能を統合できます。

IronPDFのインストール
NuGetパッケージ管理コンソールを開き、次のコマンドを実行します。
Install-Package IronPdf
5つのPersonオブジェクトのリストを生成する
// Generating instances of the Person class with NBuilder
var people = Builder<Person>.CreateListOfSize(5).Build();
// Generating instances of the Person class with NBuilder
var people = Builder<Person>.CreateListOfSize(5).Build();
' Generating instances of the Person class with NBuilder
Dim people = Builder(Of Person).CreateListOfSize(5).Build()
IronPDFを使用したPDFドキュメントの作成
このコードはIronPDFのライセンスキーを設定し、PersonオブジェクトのリストからHTMLコンテンツを生成します。
// Setting the IronPDF license key
IronPdf.License.LicenseKey = "Your-License-Key";
// Building HTML content from Person object list
var htmlContent = "<h1>Person List</h1>";
foreach (var person in people)
{
htmlContent += $"<p>Id: {person.Id}, Name: {person.Name}, Email: {person.Email}, IsMarried: {person.IsMarried}</p>";
}
// Setting the IronPDF license key
IronPdf.License.LicenseKey = "Your-License-Key";
// Building HTML content from Person object list
var htmlContent = "<h1>Person List</h1>";
foreach (var person in people)
{
htmlContent += $"<p>Id: {person.Id}, Name: {person.Name}, Email: {person.Email}, IsMarried: {person.IsMarried}</p>";
}
' Setting the IronPDF license key
IronPdf.License.LicenseKey = "Your-License-Key"
' Building HTML content from Person object list
Dim htmlContent = "<h1>Person List</h1>"
For Each person In people
htmlContent &= $"<p>Id: {person.Id}, Name: {person.Name}, Email: {person.Email}, IsMarried: {person.IsMarried}</p>"
Next person
IronPdf.License.LicenseKey は、 IronPDFの機能を有効にするために特定のライセンス キーで設定されます。 HTML コンテンツは、people リストを反復処理し、各 Person オブジェクトの詳細 (Id、Name、Email、IsMarried) を HTML 構造に追加することによって動的に構築されます。
IronPDFを使用してPDFドキュメントにPersonリストをレンダリングする
このコードはIronPDFのChromePdfRendererを使用してHTMLコンテンツをPDFドキュメントに変換します。
// Rendering HTML content into a PDF document using IronPDF
var renderer = new ChromePdfRenderer();
var pdfDoc = renderer.RenderHtmlAsPdf(htmlContent);
pdfDoc.SaveAs("PersonList.pdf");
// Rendering HTML content into a PDF document using IronPDF
var renderer = new ChromePdfRenderer();
var pdfDoc = renderer.RenderHtmlAsPdf(htmlContent);
pdfDoc.SaveAs("PersonList.pdf");
' Rendering HTML content into a PDF document using IronPDF
Dim renderer = New ChromePdfRenderer()
Dim pdfDoc = renderer.RenderHtmlAsPdf(htmlContent)
pdfDoc.SaveAs("PersonList.pdf")
ChromePdfRendererはインスタンス化され、htmlContent に保存されている HTML コンテンツを PDF ドキュメントにレンダリングします。 結果のPDFドキュメントは"PersonList.pdf"としてファイルシステムに保存されます。
出力
以下はIronPDFによって生成されたPersonListの出力です。 デフォルト値を持つ5人が含まれています。

結論
結論として、NBuilderは.NETでのテストデータ生成のための強力で柔軟なツールであり、複雑なオブジェクトグラフの作成を合理化し、テストプロセスの効率を向上させます。 IronPDFと統合することで、開発者はプロジェクトにとって価値があると感じる人々のために、PDF生成機能をアプリケーションに簡単に拡張できます。 NBuilderとIronPDFを組み合わせることで、開発ワークフローが大幅に向上し、テストとドキュメント生成がシームレスかつ効率的になります。
よくある質問
NBuilder を使用して .NET でテスト データを生成する方法は?
NBuilder は、開発者が複雑なオブジェクト グラフとテスト データを簡単に生成できる流暢なインターフェースを提供します。 CreateNew() や CreateListOfSize() などのメソッドを使用して、デフォルトまたはカスタム値を持つ単一オブジェクトまたはオブジェクトのリストを生成できます。
.NET プロジェクトで NBuilder をインストールするにはどうすればよいですか?
NBuilder をインストールするには、NuGet パッケージ マネージャー コンソールで次のコマンドを使用できます: Install-Package NBuilder。 これにより、必要な依存関係とともに NBuilder がダウンロードおよびインストールされます。
NBuilder はランダムデータと連続データの両方を生成するために使用できますか?
はい、NBuilder はランダムデータと連続データの両方の生成をサポートしています。 With() などのメソッドを使用してオブジェクト プロパティをランダム値でカスタマイズしたり、Do() を使用してプロパティを順次設定したりすることができます。
NBuilder を IronPDF と統合することで得られる利益は何ですか?
NBuilder と IronPDF を統合すると、開発者は複雑なテストデータを作成し、それを PDF として出力できます。 これにより、テストデータから動的に PDF を生成することで .NET アプリケーションを強化し、開発ワークフローを合理化することができます。
NBuilder は単体テストでどのように支援しますか?
NBuilder は、開発者が現実的なテストデータを迅速に生成できるようにすることで、単体テストにおいて価値を発揮します。 複雑なオブジェクト グラフを使用したテスト シナリオのセットアップを簡素化し、テストをより保守しやすく、効果的にします。
NBuilder で流暢なインターフェースを使用する利点は何ですか?
NBuilder の流暢なインターフェースにより、開発者は読みやすく簡潔な方法で複雑なオブジェクト グラフを作成するためのメソッド呼び出しをチェーン化できます。これにより、コードの明確性が向上し、テスト データ生成時の定型コードが削減されます。
NBuilder を使用してオブジェクトのリストを作成するにはどうすればよいですか?
NBuilder の CreateListOfSize() メソッドを使用してオブジェクトのリストを作成できます。 たとえば、Builder は、10 の Person オブジェクトのリストを生成します。
NBuilder の使用に関するトラブルシューティングのヒントを教えてください。
NBuilder が NuGet 経由で正しくインストールされ、プロジェクト参照が最新であることを確認してください。 問題が発生した場合は、NBuilder GitHub リポジトリまたはコミュニティ フォーラムを確認すると、有益な洞察や解決策が得られる場合があります。




