在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
NBuilder是一个 .NET 庫 簡化測試資料生成。開發人員可以使用其流暢介面輕鬆建立複雜的物件圖。它提供靈活性、高效性和與流行測試框架的無縫整合。在本文中,我們將探討NBuilder的功能、如何安裝它,並通過實際的程式碼範例展示其能力。
NBuilder 是一個 C# 的開源 .NET 庫,旨在簡化測試和模擬對象的創建。它可以讓開發人員根據不同的數據類型快速生成具有默認或自定義輸入的對象。
它對於單元測試、功能測試和集成測試特別有用。
它是用於測試內建 .NET 數據類型和複雜對象的基本套件之一。
它用於隨機數據生成。你可以為這個開源專案做出貢獻。
要在 NuGet 套件管理器主控台中安裝 NBuilder,請使用以下命令。
Install-Package Nbuilder
Install-Package Nbuilder
IRON VB CONVERTER ERROR developers@ironsoftware.com
上述命令將安裝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
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
以下是一個使用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
上述程式碼創建了一個具有自定屬性的 Person 對象。它初始化了一個 customPersonBuilder 用於 Person 對象,將 Name 設置為 "Tom",將 Email 設置為 "Tom@email.com"。最後,它構建了該對象並將其賦值給 objTom。
var personList = Builder<Person>
.CreateListOfSize(10)
.Build();
var personList = Builder<Person>
.CreateListOfSize(10)
.Build();
IRON VB CONVERTER ERROR developers@ironsoftware.com
這裡 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
有時您可能需要自訂正在創建的物件。您還可以使用 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
這將創建一個 personList,默認值為 Name = “Kim”、Email = “abc@email.com”,以及 IsMarried = false。
為了在人員列表中獲取現實數據值,您可以使用 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
範例 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
這是全部() 该方法已将后续操作应用于所有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。
範例 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
這裡的 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
這個單元測試驗證了PersonService類的GetPersonEmailById方法能夠正確返回Person對象的電子郵件地址,預期的電子郵件是"Tom@email.com"。它使用了Arrange-Act-Assert模式來設置測試數據、執行方法,然後檢查實際結果是否與預期結果相符。
IronPDF是一個強大的 C# 庫,專為 創建, 編輯,和 處理 PDF 在 .NET 應用程式中處理文件。通過其直觀的 API,開發人員可以無縫地將 PDF 功能集成到他們的項目中,無論是生成發票、報告還是互動表單。
打開 NuGet 程式包管理控制台,並執行以下命令:
Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
// 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
這段程式碼設置了 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
IronPdf.License.LicenseKey 是通過設置特定的授權密鑰來啟用 IronPDF 的功能。
通過遍歷人物列表動態構建 HTML 內容,附加每個 Person 對象的詳細信息。 (ID, 名稱, 電子郵件, 已婚) 嵌入到HTML結構中。
此代碼使用 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
ChromePdfRenderer 被實例化以將存儲在 htmlContent 中的 HTML 內容渲染為 PDF 文件。生成的 PDF 文件以 "PersonList.pdf" 的名稱保存到文件系統。
以下是由IronPDF生成的PersonList的輸出。它包含五個人,每個人都有默認值。
總之,NBuilder 是一個強大且靈活的工具,用於在 .NET 中生成測試資料,簡化複雜物件圖的創建,並提高測試過程的效率。通過與 IronPDF 的整合,開發者可以輕鬆地擴展其應用程式以包含 PDF 生成 對於那些認為它對他們的專案有價值的人來說,NBuilder 和 IronPDF 可以顯著提升開發工作流程,使測試和文件生成變得流暢且高效。