.NET 帮助

NBuilder .NET(它是如何为开发人员工作的)

发布 2024年八月13日
分享:

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

NBuilder .NET(开发人员工作方式):图 1 - NBuilder

NBuilder的特点

  1. NBuilder是一个C#开源.NET库,旨在简化创建用于测试和模拟的对象。它允许开发人员根据不同的数据类型快速生成具有默认或自定义输入的对象。

  2. 它对于单元测试、功能测试和集成测试特别有用。

  3. 它是测试内置.NET数据类型和复杂对象的重要包之一。

  4. 它用于随机数据生成。您可以为这个开源项目做出贡献。

  5. 使用NBuilder,您可以轻松覆盖默认属性并编写自定义配置。

安装 NBuilder

要在 NuGet 包管理器控制台中安装 NBuilder,请使用以下命令。

Install-Package Nbuilder
Install-Package Nbuilder
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

以上命令将安装NBuilder及其所有依赖项。

NBuilder .NET(它是如何为开发人员工作的):图2 - 安装NBuilder

使用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
VB   C#

示例1:创建具有默认值的Person对象

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
VB   C#

示例图片

NBuilder .NET(对于开发人员的工作原理):图3 - 带有值的Person对象

示例 2: 使用自定义生成器创建对象

以下是如何使用 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
VB   C#

上面的代码创建了一个具有自定义属性的新Person对象。初始化一个Person对象的customPersonBuilder,将Name设置为“Tom”,将Email设置为“Tom@email.com”。最后,构建该对象并将其分配给objTom。

示例3:创建带有默认值的人员对象列表

var personList = Builder<Person>
                                     .CreateListOfSize(10)
                                     .Build();
var personList = Builder<Person>
                                     .CreateListOfSize(10)
                                     .Build();
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

示例图片

NBuilder .NET(给开发人员的工作原理):图4 - Person对象列表

这里的 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
VB   C#

NBuilder .NET(对开发人员的工作原理):图5 - 自动分配值

示例 4: 自定义生成的对象

有时您可能需要自定义正在创建的对象。您还可以使用 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
VB   C#

这将创建一个personList,其默认值为Name = “Kim”,Email = “abc@email.com”,以及IsMarried = false。

示例5:使用现实随机数据创建 Person 对象列表

为了在 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
VB   C#

示例 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
VB   C#

这里的所有() 方法已对所有10个人对象应用了后续操作,并在内存中创建了一个列表。 该Do() 方法用于在每个Person对象上执行Action委托。

在这种情况下,它将每个指定的人的Id属性设置为501。 参数为lambda表达式 (

) 接受两个参数,p 是人,i 是该特定对象在列表中的索引,范围从 (0到9) 因为列表分别有10个对象。通过在 Id 属性中添加 i 值,属性将依次设置为 501 到 510,并且 Name 属性将设置为 Person 1 到 Person 10。

NBuilder .NET(开发人员如何使用):图6 - 序列数据

示例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
VB   C#

在这里,类 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
VB   C#

该单元测试验证了PersonService类的GetPersonEmailById方法是否正确返回Person对象的电子邮件地址,其预期电子邮件为"Tom@email.com"。它使用Arrange-Act-Assert模式来设置测试数据、执行方法,然后检查实际结果是否与预期结果匹配。

将NBuilder与IronPDF集成

IronPDF是一个为设计的强大C#库 创建, 编辑处理PDF 在.NET应用程序中处理文档。凭借其直观的API,开发人员可以将PDF功能无缝集成到他们的项目中,无论他们是生成发票、报告还是交互式表单。

NBuilder .NET(它是如何为开发人员工作的):图7 - IronPDF

安装 IronPDF

打开 NuGet 程序包管理控制台,并运行以下命令:

Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
VB   C#

填充5个Person对象的列表

//  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
VB   C#

使用 IronPDF 创建 PDF 文档

这段代码设置了 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
VB   C#

IronPdf.License.LicenseKey 设置为特定的许可证密钥以启用 IronPDF 的功能。

通过遍历 people 列表动态构建 HTML 内容,并附加每个 Person 对象的详细信息。 (ID, 名称, 电子邮件, 已婚) 转换为 HTML 结构。

使用 IronPDF 渲染 PDF 文档中的人员列表

此代码使用 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
VB   C#

ChromePdfRenderer 被实例化以将存储在 htmlContent 中的 HTML 内容渲染成一个 PDF 文档。生成的 PDF 文档以 "PersonList.pdf" 的名称保存到文件系统中。

输出

以下是由 IronPDF 生成的 PersonList 的输出。它包含五个人,每个都有默认值。

NBuilder .NET(它如何为开发人员工作):图 8 - PDF 输出

结论

总之,NBuilder是一个强大且灵活的工具,用于在 .NET 中生成测试数据,简化复杂对象图的创建,并提高测试过程的效率。通过与 IronPDF 集成,开发人员可以轻松扩展他们的应用程序,包括 PDF 生成 对于那些认为对他们的项目有价值的人来说,NBuilder 和 IronPDF 一起可以显著提升开发工作流程,使测试和文档生成变得无缝且高效。

< 前一页
Refit C#(为开发者工作原理)
下一步 >
C# TryParse(开发人员如何使用)

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 10,731,156 查看许可证 >