
NBuilder .NET(开发人员如何使用)
NBuilder 是一个简化测试数据生成的 .NET 库。 开发人员可以通过其流畅的接口轻松创建复杂的对象图。 它提供灵活性、效率,并与流行的测试框架无缝集成。 在本文中,我们将探讨 NBuilder 的功能、如何安装它,并通过实际代码示例演示其功能。

NBuilder 的功能
- NBuilder 是一个 C# 开源 .NET 库,旨在简化对象的创建以进行测试和模拟用途。 它允许开发人员快速生成基于不同数据类型的默认或自定义输入的对象。
- 对于单元测试、功能测试和集成测试特别有用。
- 它是测试内置 .NET 数据类型和复杂对象的基本包之一。
- 它用于随机数据生成。 您可以为此开源项目做出贡献。
- 使用 NBuilder,您可以轻松覆盖默认属性并编写自定义配置。
安装 NBuilder
要在 NuGet 包管理器控制台中安装 NBuilder,请使用以下命令。
上述命令将安装 NBuilder 及其所有依赖项。

NBuilder 的使用
NBuilder 提供了一种动态创建对象的流畅方式。 让我们从一个创建对象的简单示例开始。
这是人员模型类的源代码。
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public bool IsMarried { get; set; }
}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示例 1:创建具有默认值的人员对象
// 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
Dim person = Builder(Of Person) .CreateNew().Build()
' By default, NBuilder can provide values like
' Id = 1, Name = Name1, Email = Email1, IsMarried = false示例图像

示例 2:使用自定义生成器创建对象
这是如何使用 NBuilder 创建和配置具有自定义属性的人员对象的示例:
// 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
Dim customPersonBuilder = Builder(Of Person).CreateNew().With(Sub(p) p.Name = "Tom").With(Sub(p) p.Email = "Tom@email.com")
' Build the custom person object with the specified properties
Dim objTom = customPersonBuilder.Build()上述代码创建了一个具有自定义属性的新人员对象。 它为人员对象初始化了一个 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
Dim personList = Builder(Of Person) .CreateListOfSize(10).Build()示例图像

这里 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
Dim personList = Builder(Of Person) .CreateListOfSize(10).Build()
' Print details of each Person object in the list
For Each person In personList
Console.WriteLine($"{person.Id}, {person.Name}, {person.Email}, {person.IsMarried}")
Next person
示例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
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()这将创建一个personList,其中每个对象的默认值被覆盖为Name = "Kim",Email = "abc@email.com",以及IsMarried = false。
示例 5:创建具有真实随机数据的人员对象列表
为了在人员列表中获得真实的数据值,您可以使用 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
Dim personList = Builder(Of Person) .CreateListOfSize(10).All().With(Sub(p) p.Name = Faker.Name.FullName()).With(Sub(p) p.Id = Faker.RandomNumber.Next(20, 60)).Build()示例 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
Dim personList = Builder(Of Person).CreateListOfSize(10).All().Do(Sub(p, i) p.Id = 501 + i).Do(Sub(p, i) p.Name = $"Person {i + 1}").Build()在这里,All()方法确保后续操作适用于内存中创建的所有10个Person对象。 Action委托。 此设置依次分配Id属性,从501开始,类似地,将每个Person依次命名为"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;
}
}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的电子邮件。
测试类和测试数据
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);
}
}Imports Xunit
Public Class PersonTests
<Fact>
Public Sub GetPersonEmail_ReturnCorrectEmail()
' Arrange
Dim service = New PersonService()
Dim expectedEmail As String = "Tom@email.com"
' Create a person with specific name and email using NBuilder
Dim person = Builder(Of Person).CreateNew() _
.With(Function(p) p.Name = "Tom") _
.With(Function(p) p.Email = "Tom@email.com") _
.Build()
' Act
Dim actualEmail = service.GetPersonEmail(person)
' Assert
Assert.Equal(expectedEmail, actualEmail)
End Sub
End Class此单元测试验证Person对象的电子邮件地址。 它使用 Arrange-Act-Assert 模式来设置测试数据,执行方法,然后检查实际结果是否与预期结果匹配。
将 NBuilder 与 IronPDF 集成
了解 IronPDF 是一个强大的 C# 库,专为在 .NET 应用程序中从 HTML 创建 PDF而设计。 通过其直观的 API,开发人员可以无缝地将 PDF 功能集成到他们的项目中,无论是正在生成发票、报告还是交互式表单。

安装 IronPDF
打开 NuGet 包管理器控制台,并运行以下命令:
填充 5 个人员对象的列表
// 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创建PDF文档
此代码设置 IronPDF 许可证密钥并从人员对象列表生成 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
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的功能。 通过遍历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
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 一起可以显著增强开发工作流,使测试和文档生成更加顺畅和高效。

Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。
相关文章


