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

NBuilderの特徴
- NBuilderはテストやモックの目的でオブジェクトの作成を簡素化するために設計されたC#のオープンソース.NETライブラリです。 開発者は異なるデータ型に基づいたデフォルトまたはカスタム指定の入力でオブジェクトを素早く生成できます。
- 単体テスト、機能テスト、統合テストに特に役立ちます。
- .NET組み込みデータ型や複雑なオブジェクトをテストするための不可欠なパッケージのひとつです。
- ランダムデータ生成に使用されます。 このオープンソースプロジェクトに貢献できます。
- NBuilderを使用することで、デフォルトのプロパティを簡単にオーバーライドし、カスタム設定を記述できます。
NBuilderのインストール
NuGetパッケージ管理コンソールで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; }
}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
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
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
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
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
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になります。
例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
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
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オブジェクトすべてに対して後続の操作が適用されることを保証します。 Actionデリゲートを実行します。 この設定により、501から始まるIdプロパティが順番に割り当てられ、同様に各人の名前が"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;
}
}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ここでは、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);
}
}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(Function(p) p.Name = "Tom") _
.With(Function(p) p.Email = "Tom@email.com") _
.Build()
' Act
Dim actualEmail = service.GetPersonEmail(person)
' Assert
Assert.Equal(expectedEmail, actualEmail)
End Sub
End Classこの単体テストは、Personオブジェクトのメールアドレスを正しく返すことを検証します。 Arrange-Act-Assertパターンを使用してテストデータを設定し、メソッドを実行し、その後、実際の結果が期待される結果と一致していることを確認します。
NBuilderとIronPDFの統合
IronPDFについて学ぶは.NETアプリケーション内でHTMLからPDFを作成するために設計された強力なC#ライブラリです。 その直感的なAPIを通じて、開発者は請求書、レポート、インタラクティブなフォームを生成するかどうかに関係なく、自分のプロジェクトにシームレスにPDF機能を統合できます。

IronPDFのインストール
NuGetパッケージ管理コンソールを開き、次のコマンドを実行します。
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
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
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 personIronPdf.License.LicenseKeyは、IronPDFの機能を有効にするために特定のライセンスキーが設定されています。 HTMLコンテンツは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
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を組み合わせることで、開発ワークフローが大幅に向上し、テストとドキュメント生成がシームレスかつ効率的になります。

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。
関連する記事


