跳至頁尾內容
.NET 幫助

NBuilder .NET(開發者使用指南)

NBuilder 是一個簡化測試資料產生的 .NET 函式庫。 開發人員可以利用其流利的介面毫不費力地建立複雜的物件圖形。 它提供彈性、效率,以及與熱門測試框架的無縫整合。 在這篇文章中,我們將探討 NBuilder 的功能、如何安裝,並透過實際的程式碼範例來展示其功能。

NBuilder .NET (How It Works For Developers):圖 1 - NBuilder

NBuilder 的特點

1.NBuilder 是 C# 開放原始碼的 .NET 函式庫,設計用來簡化物件的建立,以達到測試和模擬的目的。 它可讓開發人員根據不同的資料類型,快速產生具有預設或自訂指定輸入的物件。 2.它對單元測試、功能測試和整合測試特別有用。 3.它是測試內建 .NET 資料類型和複雜物件的必備套件之一。 4.用於隨機資料產生。 您可以為這個開放原始碼專案做出貢獻。 5.使用 NBuilder,您可以毫不費力地覆寫預設屬性和撰寫自訂組態。

安裝 NBuilder

要在 NuGet Package Manager Console 中安裝 NBuilder,請使用下列指令。

Install-Package NBuilder

上述命令將安裝 NBuilder 及其所有相依性。

NBuilder .NET (How It Works For Developers):圖 2 - 安裝 NBuilder

NBuilder 的使用方法

NBuilder 提供了一種流暢的方式來快速建立物件。 讓我們從建立物件的簡單範例開始。

以下是 Person Model Class 原始碼。

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

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

範例圖片

NBuilder .NET (How It Works For Developers):圖 3 - 有值的 Person 物件

範例 2:使用自訂建立工具建立物件

以下是一個範例,說明如何使用 NBuilder 建立並配置具有自訂屬性的 Person 物件:

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

上述程式碼會建立一個具有自訂屬性的 Person 物件。 它會初始化一個 Person 物件的 customPersonBuilder,設定 Name 為"Tom",Email 為"Tom@email.com"。 最後,它會建立物件並將其指定給 objTom。

範例 3:建立具有預設值的人物物件清單

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

範例圖片

NBuilder .NET (How It Works For Developers):圖 4 - 個人物件清單

這裡 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}");
}
$vbLabelText   $csharpLabel

NBuilder .NET (How It Works For Developers):圖 5 - 自動指定值

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

這會建立一個 personList 物件,其中每個物件的預設值都會重設為 Name = "Kim"、Email = "abc@email.com"、IsMarried = false。

範例 5:使用真實隨機資料建立人物物件清單

為了在 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();
$vbLabelText   $csharpLabel

範例 6:使用序列資料建立人物物件清單

有時候您可能需要產生具有連續資料的物件。 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();
$vbLabelText   $csharpLabel

在此,All() 方法可確保後續操作適用於記憶體中建立的所有 10 個人物件。 Do() 方法會在每個 Person 物件上執行 Action 委託。 此設定從 501 開始依序指定 Id 屬性,同樣地,依序將每個人命名為"Person 1"至"Person 10"。

NBuilder .NET (How It Works For Developers):圖 6 - 序列資料

範例 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;
    }
}
$vbLabelText   $csharpLabel

在此,Person 類擁有幾個屬性,例如 IdNameEmailIsMarried,而 PersonService 包含一個方法 GetPersonEmail(),可傳回給定 Person 的電子郵件。

測試類與測試資料

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

此單元測試驗證 PersonService 類的 GetPersonEmail 方法是否能正確傳回 Person 物件的電子郵件地址,預期的電子郵件為 "Tom@email.com"。 它使用 Arrange-Act-Assert 模式來設定測試資料、執行方法,然後檢查實際結果是否與預期結果相符。

將 NBuilder 與 IronPDF 整合。

瞭解 IronPDF 是一個功能強大的 C# 函式庫,專為在 .NET 應用程式中 從 HTML 建立 PDF 而設計。 透過其直覺的 API,開發人員可以將 PDF 功能無縫整合到他們的專案中,無論是產生發票、報告或互動表單。

NBuilder .NET (How It Works For Developers):圖 7 - IronPdf

安裝 IronPDF。

開啟 NuGet Package Manager 主控台,並執行下列指令:

Install-Package IronPdf

填入 5 個人物件清單

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

使用 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>";
}
$vbLabelText   $csharpLabel

IronPdf.License.LicenseKey設定特定的授權金鑰,以啟用 IronPDF 的功能。 HTML 內容是透過迭代 people 清單,將每個 Person 物件的詳細資訊 (Id、Name、Email、IsMarried) 附加到 HTML 結構中來動態建構的。

使用 IronPDF 渲染 PDF 文件中的人員名單

本代碼使用 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");
$vbLabelText   $csharpLabel

ChromePdfRenderer 被實體化以將儲存於 htmlContent 中的 HTML 內容渲染為 PDF 文件。 所產生的 PDF 文件會以"PersonList.pdf"的名稱儲存到檔案系統中。

輸出

以下為 IronPDF 所產生的 PersonList 輸出。 它包含五個人,每個人都有預設值。

NBuilder .NET (How It Works For Developers):圖 8 - PDF 輸出

結論

總而言之,NBuilder 是一款強大且靈活的工具,可用於在 .NET 中產生測試資料、簡化複雜物件圖形的建立,以及提升測試流程的效率。 透過與 IronPDF 整合,開發人員可以輕鬆地擴展他們的應用程式,加入 PDF 生成功能,讓那些覺得對他們的專案有價值的人使用。 NBuilder 和 IronPDF 可共同顯著增強開發工作流程,使測試和文件生成無縫且高效。

常見問題解答

如何使用 .NET 中的 NBuilder 產生測試資料?

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.CreateListOfSize(10).Build()產生一個包含 10 個Person物件的清單。

使用 NBuilder 時有哪些故障排除技巧?

請確保已透過 NuGet 正確安裝 NBuilder,並驗證您的專案參考是否為最新版本。如果遇到問題,可以查看 NBuilder GitHub 程式碼庫或社群論壇,或許能找到有用的資訊和解決方案。

Jacob Mellor,Team Iron 首席技術官
首席技術長

Jacob Mellor 是 Iron Software 的首席技術官,也是一位富有遠見的工程師,率先開發了 C# PDF 技術。作為 Iron Software 核心程式碼庫的最初開發者,他自公司成立之初便參與塑造了其產品架構,並與執行長 Cameron Rimington 一起將其發展成為一家擁有 50 多名員工、服務於 NASA、特斯拉和全球政府機構的公司。

Jacob 於 1998 年至 2001 年在曼徹斯特大學獲得土木工程一級榮譽學士學位。 1999 年,他在倫敦創辦了自己的第一家軟體公司;2005 年,他創建了自己的第一個 .NET 元件。此後,他專注於解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF 和 IronSuite .NET 庫在全球 NuGet 上的安裝量已超過 3000 萬次,其基礎程式碼持續為全球開發者工具提供支援。憑藉 25 年的商業經驗和 41 年的程式設計專長,Jacob 始終致力於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代技術領導者。