在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
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对象。初始化一个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,
IRON VB CONVERTER ERROR developers@ironsoftware.com
这将创建一个personList,其默认值为Name = “Kim”,Email = “abc@email.com”,以及IsMarried = false。
为了在 Person 列表中获取真实的数据值,可以使用 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个人对象应用了后续操作,并在内存中创建了一个列表。 该Do() 方法用于在每个Person对象上执行Action委托。
在这种情况下,它将每个指定的人的Id属性设置为501。 参数为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;
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
在这里,类 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);
}
}
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 的功能。
通过遍历 people 列表动态构建 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 一起可以显著提升开发工作流程,使测试和文档生成变得无缝且高效。