在生產環境中測試,無水印。
在任何需要的地方都能運行。
獲得 30 天的全功能產品。
在幾分鐘內上手運行。
試用產品期間完全訪問我們的支援工程團隊
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();
Dim customPersonBuilder = Builder(Of Person).CreateNew().With(Sub(p) p.Name = "Tom").With(Sub(p) p.Email = "Tom@email.com")
Dim objTom = customPersonBuilder.Build()
上述程式碼建立了一個具有自定屬性的 Person 對象。 它初始化了一個自訂 customPersonBuilder 用於 Person 物件,將名字設為 "Tom" 並將電子郵件設為 "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,
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,
這將創建一個 personList,默認值為 Name = “Kim”、Email = “abc@email.com”,以及 IsMarried = false。
為了在 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
範例 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
此處,All() 方法應用於後續操作以處理所有 10 個 person 對象並在記憶體中創建列表。 Do() 方法用於在每個 Person 物件上執行 Action Delegate。
在這個例子中,它將每個人指定的 Id 屬性設置為 501。Lambda 表達式 (p, i) 接受兩個參數:p 是人員,i 是該特定對象在列表中的索引,範圍從 (0 到 9),因為該列表分別包含 10 個對象。 透過在 Id 屬性中添加 i 值,屬性將依次設定從 501 到 510,並且 Name 屬性將設定為 Person 1 到 Person 10。
範例7:使用Xunit進行單元測試的NBuilder
NBuilder 在 .NET 中經常用於測試環境,開發人員需要生成真實且多樣化的數據集以進行測試。 它使測試變得簡單且易於維護,使用複雜的對象允許開發人員使用 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;
}
}
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
這裡,類別 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);
}
}
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
該單元測試驗證了 PersonService 類的 GetPersonEmailById 方法是否正確返回具有預期電子郵件 "Tom@email.com" 的 Person 物件的電子郵件地址。 它使用安排-執行-斷言模式來設置測試數據,執行該方法,然後檢查實際結果是否符合預期結果。
了解 IronPDF 是一個強大的 C# 程式庫,專為在 .NET 應用程式中從 HTML 創建 PDF而設計。 憑藉其直觀的 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();
' Generating instances of the Person class with NBuilder
Dim people = Builder(Of Person).CreateListOfSize(5).Build()
此代碼設置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
IronPdf.License.LicenseKey 使用特定的授權金鑰來啟用 IronPDF 的功能。
透過迭代 people 列表動態構建 HTML 內容,將每個 Person 對象的詳細信息(Id、Name、Email、IsMarried)附加到 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");
Dim renderer = New ChromePdfRenderer()
Dim pdfDoc = renderer.RenderHtmlAsPdf(htmlContent)
pdfDoc.SaveAs("PersonList.pdf")
ChromePdfRenderer 被實例化,用於將存儲在 htmlContent 中的 HTML 內容渲染成 PDF 文件。 生成的 PDF 文件將以 "PersonList.pdf" 的名稱保存到文件系統。
下面是由IronPDF生成的PersonList的輸出。 它包含五個人,每個人都有預設值。
總結而言,NBuilder 是一個強大且靈活的工具,用於在 .NET 中生成測試數據,簡化複雜對象圖的創建,並提高測試過程的效率。 透過與 IronPDF 整合,開發人員可以輕鬆擴展其應用程式,為那些認為對其專案有價值的人員包含PDF 生成功能。 NBuilder 和 IronPDF 共同配合可以顯著提升開發工作流程,使測試和文件生成順暢且高效。