.NET 幫助

NBuilder .NET(其工作原理對開發者)

發佈 2024年8月13日
分享:

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
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();
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

上述程式碼創建了一個具有自定屬性的 Person 對象。它初始化了一個 customPersonBuilder 用於 Person 對象,將 Name 設置為 "Tom",將 Email 設置為 "Tom@email.com"。最後,它構建了該對象並將其賦值給 objTom。

範例 3:使用預設值建立人員物件列表

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 - 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
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,
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

這將創建一個 personList,默認值為 Name = “Kim”、Email = “abc@email.com”,以及 IsMarried = false。

範例5:使用現實隨機數據來創建人員對象列表

為了在人員列表中獲取現實數據值,您可以使用 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: 使用連續資料建立人員物件列表

有時您可能需要生成具有連續資料的物件。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
VB   C#

這是全部() 该方法已将后续操作应用于所有10个人员对象,并在内存中创建了一个列表。The Do() 該方法用來對每個 Person 對象執行 Action Delegate。

在這種情況下,它將每個人員的 Id 屬性設置為 501。lambda 表達式 (p, i) 接受兩個參數,p 是那個人,i 是該特定物件在列表中的索引,範圍從 (0 到 9) 因為列表中分別有10個對象。通過將 i 值添加到 Id 屬性中,這些屬性會依次設置為501到510,並且 Name 屬性將設置為 Person 1 到 Person 10。

NBuilder .NET(適用於開發人員的工作原理):圖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;
        }
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

這裡的 Person 類別具有以下屬性,而 PersonService 只有一個公開方法 GetPersonEmail() 返回該特定對象的 Person 電子郵件。

測試類別和測試數據

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);
     }
 }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

這個單元測試驗證了PersonService類的GetPersonEmailById方法能夠正確返回Person對象的電子郵件地址,預期的電子郵件是"Tom@email.com"。它使用了Arrange-Act-Assert模式來設置測試數據、執行方法,然後檢查實際結果是否與預期結果相符。

將 NBuilder 與 IronPDF 整合

IronPDF是一個強大的 C# 庫,專為 創建, 編輯,和 處理 PDF 在 .NET 應用程式中處理文件。通過其直觀的 API,開發人員可以無縫地將 PDF 功能集成到他們的項目中,無論是生成發票、報告還是互動表單。

NBuilder .NET(對開發人員的工作原理):圖 7 - IronPDF

安裝 IronPDF

打開 NuGet 程式包管理控制台,並執行以下命令:

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();
IRON VB CONVERTER ERROR developers@ironsoftware.com
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>";
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

IronPdf.License.LicenseKey 是通過設置特定的授權密鑰來啟用 IronPDF 的功能。

通過遍歷人物列表動態構建 HTML 內容,附加每個 Person 對象的詳細信息。 (ID, 名稱, 電子郵件, 已婚) 嵌入到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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

ChromePdfRenderer 被實例化以將存儲在 htmlContent 中的 HTML 內容渲染為 PDF 文件。生成的 PDF 文件以 "PersonList.pdf" 的名稱保存到文件系統。

輸出

以下是由IronPDF生成的PersonList的輸出。它包含五個人,每個人都有默認值。

NBuilder .NET(針對開發人員的運作方式):圖8 - PDF 輸出

結論

總之,NBuilder 是一個強大且靈活的工具,用於在 .NET 中生成測試資料,簡化複雜物件圖的創建,並提高測試過程的效率。通過與 IronPDF 的整合,開發者可以輕鬆地擴展其應用程式以包含 PDF 生成 對於那些認為它對他們的專案有價值的人來說,NBuilder 和 IronPDF 可以顯著提升開發工作流程,使測試和文件生成變得流暢且高效。

< 上一頁
Refit C#(它如何為開發人員工作)
下一個 >
C# TryParse(開發者如何使用)

準備開始了嗎? 版本: 2024.10 剛剛發布

免費 NuGet 下載 總下載次數: 10,993,239 查看許可證 >