在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
NBuilder是一个.NET 库简化测试数据生成。 开发人员可以利用其流畅的界面毫不费力地创建复杂的对象图。 它具有灵活性、高效性,并能与流行的测试框架无缝集成。 在本文中,我们将探讨 NBuilder 的功能、安装方法,并通过实际代码示例演示其功能。
NBuilder 是一个 C# 开源 .NET 库,旨在简化对象的创建,用于测试和模拟目的。 它允许开发人员根据不同的数据类型快速生成具有默认或自定义指定输入的对象。
它尤其适用于单元测试、功能测试和集成测试。
它是测试内置 .NET 数据类型和复杂对象的基本软件包之一。
它用于随机数据生成。 您可以为这个开源项目做出贡献。
要在 NuGet 软件包管理器控制台中安装 NBuilder,请使用以下命令。
Install-Package Nbuilder
Install-Package Nbuilder
IRON VB CONVERTER ERROR developers@ironsoftware.com
上述命令将安装 NBuilder 及其所有依赖项。
NBuilder 提供了一种流畅的即时创建对象的方法。 让我们从创建对象的简单示例开始。
以下是人员模型类的源代码。
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 对象。 它初始化了一个 Person 对象的 customPersonBuilder,将 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,
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:使用顺序数据创建人对象列表
有时您可能需要生成带有顺序数据的对象。 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 个人对象的后续操作,并在内存中创建一个列表。 任务()该方法用于在每个 Person 对象上执行动作委托。
在本例中,它会设置 501 指定的每个人的 Id 属性。lambda 表达式(
,)翻译时需要两个参数:p 是人,i 是特定对象在列表中的索引,范围从(0到9)因为列表中分别有 10 个对象。 通过在 Id 属性中添加 i 值,属性将从 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;
}
}
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()返回特定对象的人的电子邮件。
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 方法是否能正确返回 Person 对象的电子邮件地址(预期电子邮件地址为 "Tom@email.com")。 它使用 Arrange-Act-Assert 模式来设置测试数据、执行方法,然后检查实际结果是否与预期结果一致。
了解 IronPDF是一个功能强大的 C# 库,设计用于从 HTML 创建 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();
' 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 的功能。
通过对人员列表进行迭代,动态构建 HTML 内容,附加每个人员对象的详细信息(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");
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 可共同显著增强开发工作流程,使测试和文档生成变得无缝、高效。