.NET ヘルプ

NBuilder .NET (開発者のための仕組み)

NBuilder は、テストデータ生成を簡素化する .NET ライブラリ です。 開発者は、その流暢なインターフェイスを使って、複雑なオブジェクト・グラフを簡単に作成することができる。 柔軟性、効率性、一般的なテストフレームワークとのシームレスな統合を提供します。 この記事では、NBuilderの機能、インストール方法、そして実用的なコード例でその機能を紹介する。

NBuilder .NET(開発者向けの使い方):図1 - NBuilder

NBuilderの特徴

  1. NBuilderは、テストやモッキングを目的としたオブジェクトの作成を簡素化するために設計されたC#オープンソースの.NETライブラリです。 開発者は、さまざまなデータ型に基づいて、デフォルトまたはカスタム指定の入力でオブジェクトをすばやく生成することができます。

  2. ユニットテスト、機能テスト、統合テストに特に役立ちます。

  3. .NETの組み込みデータ型や複雑なオブジェクトをテストするのに不可欠なパッケージのひとつである。

  4. ランダムデータの生成に使用される。 このオープンソースプロジェクトに貢献することができる。

  5. NBuilderを使用すると、デフォルトのプロパティを簡単に上書きし、カスタム設定を記述することができます。

NBuilderのインストール

NuGetパッケージ・マネージャ・コンソールでNBuilderをインストールするには、以下のコマンドを使用します。

Install-Package Nbuilder
Install-Package Nbuilder
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

上記のコマンドは、NBuilderをその依存関係すべてとともにインストールする。

NBuilder .NET(開発者のための仕組み):図2 - NBuilderのインストール

NBuilderの使い方

NBuilderは、その場でオブジェクトを作成する流暢な方法を提供する。 オブジェクトを作成する簡単な例から始めよう。

Personモデルクラスのソースコードです。

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; }
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

例 1 : 既定値を持つ Person オブジェクトの作成

var person = Builder<Person>
                .CreateNew()
                .Build();
// person = { Id = 1, Name = Name1, Email = Email1 , IsMarried  = false }
var person = Builder<Person>
                .CreateNew()
                .Build();
// person = { Id = 1, Name = Name1, Email = Email1 , IsMarried  = false }
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

サンプル画像

NBuilder .NET(開発者がどのように活用するか):図3 - 値を持つPersonオブジェクト

例2:カスタムビルダーでオブジェクトを作成する

以下は、NBuilder を使用して、カスタム・プロパティを持つ Person オブジェクトを作成および構成する方法の例です:

var customPersonBuilder = Builder<Person>.CreateNew()
                .With(p => p.Name = "Tom")
                .With(p => p.Email = "Tom@email.com");
var objTom = customPersonBuilder.Build();
var customPersonBuilder = Builder<Person>.CreateNew()
                .With(p => p.Name = "Tom")
                .With(p => p.Email = "Tom@email.com");
var objTom = customPersonBuilder.Build();
Dim customPersonBuilder = Builder(Of Person).CreateNew().With(Sub(p) p.Name = "Tom").With(Sub(p) p.Email = "Tom@email.com")
Dim objTom = customPersonBuilder.Build()
$vbLabelText   $csharpLabel

上記のコードでは、カスタムプロパティを持つ新しい Person オブジェクトが作成されます。 Person オブジェクトの customPersonBuilder を初期化し、Name を "Tom"、Email を "Tom@email.com" に設定します。 最後に、オブジェクトを構築し、objTomに代入する。

例 3:デフォルト値を持つ Person オブジェクト・リストの作成

var personList = Builder<Person>
                                     .CreateListOfSize(10)
                                     .Build();
var personList = Builder<Person>
                                     .CreateListOfSize(10)
                                     .Build();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

サンプル画像

NBuilder .NET(開発者のための動作方法):図4 - Personオブジェクトリスト

ここで、personListは、デフォルト値を持つ10個のオブジェクトを持ち、それらを表示します。

var personList = Builder<Person>
                                            .CreateListOfSize(10)
                                            .Build();
// Here it creates the 10 objects of Person in personList
foreach (var person in personList)
{
    Console.WriteLine($"{person.Id}, {person.Name}, {person.Email}, {person.IsMarried}, ");
}
var personList = Builder<Person>
                                            .CreateListOfSize(10)
                                            .Build();
// Here it creates the 10 objects of Person in personList
foreach (var person in personList)
{
    Console.WriteLine($"{person.Id}, {person.Name}, {person.Email}, {person.IsMarried}, ");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

NBuilder .NET(開発者への活用法): 図5 - 値の自動割り当て

例4:生成オブジェクトのカスタマイズ

作成されるオブジェクトをカスタマイズする必要がある場合もあります。 with()メソッドを使用してオブジェクトの値をカスタマイズすることもできます。

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();
// Output:  
//    Id:  1, Name: Name1, Email: Email1, IsMarried False,
//    Id : 2, Name: Name2, Email: Email2, IsMarried True,
//    Id : 3, Name: Name3, Email: Email3, IsMarried False,
//    Id : 4, Name: Name4, Email: Email4, IsMarried True,
//    Id : 5, Name: Name5, Email: Email5, IsMarried False,
//    Id : 6, Name: Name6, Email: Email6, IsMarried True,
//    Id : 7, Name: Name7, Email: Email7, IsMarried False,
//    Id : 8, Name: Name8, Email: Email8, IsMarried True,
//    Id : 9, Name: Name9, Email: Email9, IsMarried False,
//    Id : 10, Name: Name10, Email: Email10, IsMarried True,
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();
// Output:  
//    Id:  1, Name: Name1, Email: Email1, IsMarried False,
//    Id : 2, Name: Name2, Email: Email2, IsMarried True,
//    Id : 3, Name: Name3, Email: Email3, IsMarried False,
//    Id : 4, Name: Name4, Email: Email4, IsMarried True,
//    Id : 5, Name: Name5, Email: Email5, IsMarried False,
//    Id : 6, Name: Name6, Email: Email6, IsMarried True,
//    Id : 7, Name: Name7, Email: Email7, IsMarried False,
//    Id : 8, Name: Name8, Email: Email8, IsMarried True,
//    Id : 9, Name: Name9, Email: Email9, IsMarried False,
//    Id : 10, Name: Name10, Email: Email10, IsMarried True,
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()
' Output:  
'    Id:  1, Name: Name1, Email: Email1, IsMarried False,
'    Id : 2, Name: Name2, Email: Email2, IsMarried True,
'    Id : 3, Name: Name3, Email: Email3, IsMarried False,
'    Id : 4, Name: Name4, Email: Email4, IsMarried True,
'    Id : 5, Name: Name5, Email: Email5, IsMarried False,
'    Id : 6, Name: Name6, Email: Email6, IsMarried True,
'    Id : 7, Name: Name7, Email: Email7, IsMarried False,
'    Id : 8, Name: Name8, Email: Email8, IsMarried True,
'    Id : 9, Name: Name9, Email: Email9, IsMarried False,
'    Id : 10, Name: Name10, Email: Email10, IsMarried True,
$vbLabelText   $csharpLabel

これは、デフォルト値が Name = "Kim"、Email = "abc@email.com"、IsMarried = false の personList を作成します。

例5:現実的なランダムデータによる人物オブジェクトリストの作成

Person Listで現実的なデータ値を取得するには、Faker Library .NETを使用します。

var personList = Builder<Person>
                .CreateListOfSize(10)
                .All()
                .With(p => p.Name = Faker.Name.FullName())
                .With(p => p.Id = Faker.RandomNumber.Next(20, 60))
                .Build();
var personList = Builder<Person>
                .CreateListOfSize(10)
                .All()
                .With(p => p.Name = Faker.Name.FullName())
                .With(p => p.Id = Faker.RandomNumber.Next(20, 60))
                .Build();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

例 6: 連続データを使用してPersonオブジェクトリストを作成

シーケンシャルなデータを持つオブジェクトを生成する必要がある場合がある。 NBuilder .NETは、Doメソッドを使用してこれを容易にします。

var personList = Builder<Person>.CreateListOfSize(10)
                .All()
                .Do((p, i) => p.Id = 501 + i)
                .Do((p, i) => p.Name = $"Person {i + 1}")
                .Build();
var personList = Builder<Person>.CreateListOfSize(10)
                .All()
                .Do((p, i) => p.Id = 501 + i)
                .Do((p, i) => p.Name = $"Person {i + 1}")
                .Build();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ここで、All() メソッドは、その後の操作にすべての 10 の人物オブジェクトに適用され、メモリ内にリストを作成します。 Do()メソッドは、各PersonオブジェクトでActionデリゲートを実行するために使用されます。

この場合、501によって指定された各人物のIdプロパティを設定します。ラムダ式 (p, i) は2つのパラメータを取ります: p は人物を指し、i はその特定のオブジェクトがリスト内で占めるインデックスを示します。リストにはそれぞれ10のオブジェクトがあるため、インデックスは0から9までの範囲です。 Id プロパティに i 値を追加することで、プロパティは 501 から 510 に順次設定され、Name プロパティは Person 1 から Person 10 に設定されます。

NBuilder .NET(開発者向けの仕組み):図6 - 連続データ

例 7: Xunit を使用した NBuilder と単体テスト

.NETのNBuilderは、開発者がテストのために現実的で多様なデータセットを生成する必要があるテスト環境で広く使用されています。 開発者がラムダ式やデリゲート関数を使用してカスタムの初期化ロジックを定義できる複雑なオブジェクトを使用することで、効率的で柔軟なテストデータ生成に関心のある開発者向けに、テストを簡単で保守性の高いものにします。

ユニットテストのためのモデルクラスとサービス

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
$vbLabelText   $csharpLabel

ここで、クラスPersonには次のプロパティがあり、PersonServiceには、特定のオブジェクトのPersonのメールアドレスを返す唯一のパブリックメソッドGetPersonEmail()があります。

テストクラスとテストデータ

public class PersonTests
{
     [Fact]
     public void GetPersonEmail_ReturnCorrectEmail()
     {
         // Arrange
         var service = new PersonService();
         string expectedEmail = "Tom@email.com";
         var person = Builder<Person>.CreateNew()
             .With(p => p.Name = "Tom")
             .With(p => p.Email "Tom@email.com")
             .Build();
         // Act
         var actualEmail = service.GetPersonEmailById(person);
         // Assert
         Assert.Equal(actualEmail, expectedEmail);
     }
}
public class PersonTests
{
     [Fact]
     public void GetPersonEmail_ReturnCorrectEmail()
     {
         // Arrange
         var service = new PersonService();
         string expectedEmail = "Tom@email.com";
         var person = Builder<Person>.CreateNew()
             .With(p => p.Name = "Tom")
             .With(p => p.Email "Tom@email.com")
             .Build();
         // Act
         var actualEmail = service.GetPersonEmailById(person);
         // Assert
         Assert.Equal(actualEmail, expectedEmail);
     }
}
Public Class PersonTests
	 <Fact>
	 Public Sub GetPersonEmail_ReturnCorrectEmail()
		 ' Arrange
		 Dim service = New PersonService()
		 Dim expectedEmail As String = "Tom@email.com"
		 Dim person = Builder(Of Person).CreateNew().With(Sub(p) p.Name = "Tom").With(Function(p) p.Email "Tom@email.com").Build()
		 ' Act
		 Dim actualEmail = service.GetPersonEmailById(person)
		 ' Assert
		 Assert.Equal(actualEmail, expectedEmail)
	 End Sub
End Class
$vbLabelText   $csharpLabel

このユニット・テストでは、PersonService クラスの GetPersonEmailById メソッドが Person オブジェクトの電子メール・アドレスを、期待される電子メール "Tom@email.com" と共に正しく返すことを検証します。 Arrange-Act-Assertパターンを使ってテストデータをセットアップし、メソッドを実行し、実際の結果が期待した結果と一致するかをチェックする。

NBuilderとIronPDFの統合

IronPDFについて学ぶ は、.NETアプリケーション内でHTMLからPDFを作成するために設計された強力なC#ライブラリです。 その直感的なAPIにより、開発者は、請求書、レポート、対話型フォームの生成のいずれであっても、PDF機能をプロジェクトにシームレスに統合することができます。

NBuilder .NET (開発者にとっての仕組み): 図7 - IronPDF

IronPDFのインストール

NuGet Package Managerコンソールを開き、以下のコマンドを実行してください:

Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
$vbLabelText   $csharpLabel

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()
$vbLabelText   $csharpLabel

IronPDFを使ったPDFドキュメントの作成

このコードはIronPDFライセンスキーを設定し、PersonオブジェクトのリストからHTMLコンテンツを生成します。

IronPdf.License.LicenseKey = "Your-License-Key";
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>";
}
IronPdf.License.LicenseKey = "Your-License-Key";
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>";
}
IronPdf.License.LicenseKey = "Your-License-Key"
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
$vbLabelText   $csharpLabel

IronPDF.License.LicenseKeyにはIronPDFの機能を有効にするためのライセンスキーが設定されます。

HTMLコンテンツは、peopleリストを反復処理することで動的に構築され、各Personオブジェクトの詳細(Id、Name、Email、IsMarried)がHTML構造に追加されます。

IronPDFを使ったPDFドキュメントの人物リストのレンダリング

このコードは、IronPDFのChromePdfRendererを使用してHTMLコンテンツをPDFドキュメントに変換します。

var renderer = new ChromePdfRenderer();
var pdfDoc = renderer.RenderHtmlAsPdf(htmlContent);
pdfDoc.SaveAs("PersonList.pdf");
var renderer = new ChromePdfRenderer();
var pdfDoc = renderer.RenderHtmlAsPdf(htmlContent);
pdfDoc.SaveAs("PersonList.pdf");
Dim renderer = New ChromePdfRenderer()
Dim pdfDoc = renderer.RenderHtmlAsPdf(htmlContent)
pdfDoc.SaveAs("PersonList.pdf")
$vbLabelText   $csharpLabel

ChromePdfRenderer は、htmlContent に保存された HTML コンテンツを PDF ドキュメントにレンダリングするためにインスタンス化されます。 出来上がったPDF文書はファイルシステムに「PersonList.pdf」という名前で保存されます。

出力

以下はIronPDFによって生成されたPersonListの出力です。 それぞれデフォルト値で、5人の人物が含まれている。

NBuilder .NET(開発者向けの動作方法):図8 - PDF出力

結論

結論として、NBuilderは.NETでテストデータを生成し、複雑なオブジェクトグラフの作成を効率化し、テストプロセスの効率を高めるための堅牢で柔軟なツールです。 IronPDFを統合することで、開発者はプロジェクトに価値があると感じる人々のためにPDF生成機能を含めるようにアプリケーションを簡単に拡張できます。 NBuilderとIronPDFを組み合わせることで、開発ワークフローを大幅に強化し、テストと文書生成をシームレスかつ効率的に行うことができます。

チペゴ
ソフトウェアエンジニア
チペゴは優れた傾聴能力を持ち、それが顧客の問題を理解し、賢明な解決策を提供する助けとなっています。彼は情報技術の学士号を取得後、2023年にIron Softwareチームに加わりました。現在、彼はIronPDFとIronOCRの2つの製品に注力していますが、顧客をサポートする新しい方法を見つけるにつれて、他の製品に関する知識も日々成長しています。Iron Softwareでの協力的な生活を楽しんでおり、さまざまな経験を持つチームメンバーが集まり、効果的で革新的な解決策を提供することに貢献しています。チペゴがデスクを離れているときは、良い本を楽しんだり、サッカーをしていることが多いです。
< 以前
C#をリフィットする(開発者のための仕組み)
次へ >
C# TryParse(開発者向けの動作方法)