.NET ヘルプ

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

公開済み 2024年8月13日
共有:

NBビルダーです.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
VB   C#

上記のコマンドは、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
VB   C#

例 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
VB   C#

サンプル画像

.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()
VB   C#

上記のコードでは、カスタムプロパティを持つ新しい 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
VB   C#

サンプル画像

.NBuilder(エヌビルダー) .NET(開発者向けの仕組み):図4 - 人物オブジェクトリスト

ここで、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
VB   C#

.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,
VB   C#

これは、デフォルト値が 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
VB   C#

例6:連続したデータを持つ人物オブジェクト・リストの作成」を参照してください。

シーケンシャルなデータを持つオブジェクトを生成する必要がある場合がある。 .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
VB   C#

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

この場合、501で指定された各人のIdプロパティを設定します。ラムダ式(p, i)pは人物で、iはリスト内の特定のオブジェクトのインデックスです。(0 から 9)リストにはそれぞれ10個のオブジェクトがあります。 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
VB   C#

ここで、Person クラスには以下のプロパティがあり、PersonService には 1 つのパブリック・メソッド 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
VB   C#

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

NBuilderとIronPDFの統合

IronPdfについて学ぶは、以下のために設計された強力なC#ライブラリです。HTMLからPDFを作成.NETアプリケーション内で。 その直感的な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
VB   C#

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()
VB   C#

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
VB   C#

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

HTMLコンテンツは、Personオブジェクトの詳細を追加しながら、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")
VB   C#

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

出力

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

.NBuilder(エヌビルダー) .NET(開発者のための仕組み):図8 - PDF出力

結論

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

< 以前
C#をリフィットする(開発者のための仕組み)
次へ >
C# TryParse(開発者向けの動作方法)