Saltar al pie de página
.NET AYUDA

NBuilder .NET (Cómo Funciona para Desarrolladores)

NBuilder es una biblioteca .NET que simplifica la generación de datos de prueba. Los desarrolladores pueden crear gráficos de objetos complejos sin esfuerzo con su interfaz fluida. Ofrece flexibilidad, eficiencia e integración perfecta con marcos de prueba populares. En este artículo, exploraremos las características de NBuilder, cómo instalarlo y demostramos sus capacidades con ejemplos de código prácticos.

NBuilder .NET (Cómo funciona para los desarrolladores): Figura 1 - NBuilder

Características de NBuilder

  1. NBuilder es una biblioteca de código abierto .NET en C# diseñada para simplificar la creación de objetos para propósitos de prueba y simulación. Permite a los desarrolladores generar rápidamente objetos con entradas predeterminadas o personalizadas basadas en diferentes tipos de datos.
  2. Es especialmente útil para pruebas unitarias, pruebas funcionales y pruebas de integración.
  3. Es uno de los paquetes esenciales para probar tipos de datos integrados de .NET y objetos complejos.
  4. Se utiliza para la generación de datos aleatorios. Puedes contribuir a este proyecto de código abierto.
  5. Con NBuilder, puedes sobrescribir sin esfuerzo las propiedades predeterminadas y escribir configuraciones personalizadas.

Instalación de NBuilder

Para instalar NBuilder en la Consola del Administrador de Paquetes NuGet, utiliza el siguiente comando.

Install-Package NBuilder

El comando anterior instalará NBuilder con todas sus dependencias.

NBuilder .NET (Cómo funciona para los desarrolladores): Figura 2 - Instalar NBuilder

Uso de NBuilder

NBuilder proporciona una forma fluida de crear objetos sobre la marcha. Comencemos con un ejemplo simple de creación de un objeto.

Aquí está el código fuente de la Clase del Modelo Persona.

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; }
}
$vbLabelText   $csharpLabel

Ejemplo 1: Creación de un objeto Persona con valores predeterminados

// 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
var person = Builder<Person>
                .CreateNew()
                .Build();
// By default, NBuilder can provide values like 
// Id = 1, Name = Name1, Email = Email1, IsMarried = false
$vbLabelText   $csharpLabel

Imagen de muestra

NBuilder .NET (Cómo funciona para los desarrolladores): Figura 3 - Objeto Persona con valores

Ejemplo 2: Creación de objetos con un constructor personalizado

Aquí hay un ejemplo de cómo usar NBuilder para crear y configurar un objeto Persona con propiedades personalizadas:

// 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
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();
$vbLabelText   $csharpLabel

El código anterior crea un nuevo objeto Persona con propiedades personalizadas. Inicializa un customPersonBuilder para un objeto Persona, configurando el Nombre como "Tom" y el Correo Electrónico como "Tom@email.com". Finalmente, construye el objeto y lo asigna a objTom.

Ejemplo 3: Creación de una lista de objetos persona con valor predeterminado

// 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
var personList = Builder<Person>
                                     .CreateListOfSize(10)
                                     .Build();
$vbLabelText   $csharpLabel

Imagen de muestra

NBuilder .NET (Cómo funciona para los desarrolladores): Figura 4 - Lista de objetos Persona

Aquí personList tiene 10 objetos con sus valores predeterminados y los imprime.

// 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
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}");
}
$vbLabelText   $csharpLabel

NBuilder .NET (Cómo funciona para los desarrolladores): Figura 5 - Asignación automática de valores

Ejemplo 4: Personalización de objetos generados

A veces puede que necesites personalizar los objetos que se están creando. También puedes personalizar el valor de un objeto utilizando el método 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
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();
$vbLabelText   $csharpLabel

Esto crea una personList con cada objeto teniendo su valor predeterminado sobrescrito a Nombre = "Kim", Correo Electrónico = "abc@email.com", y Estado Civil = falso.

Ejemplo 5: Creación de una lista de objetos persona con datos aleatorios realistas

Para obtener valores de datos realistas en la Lista de Personas, puedes usar la Biblioteca Faker .NET para generar datos realistas.

// 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
var personList = Builder<Person>
                .CreateListOfSize(10)
                .All()
                .With(p => p.Name = Faker.Name.FullName())
                .With(p => p.Id = Faker.RandomNumber.Next(20, 60))
                .Build();
$vbLabelText   $csharpLabel

Ejemplo 6: Creación de una Lista de Objetos Persona con Datos Secuenciales

Hay momentos en que podrías necesitar generar objetos con datos secuenciales. NBuilder .NET facilita esto usando el método 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
var personList = Builder<Person>.CreateListOfSize(10)
                .All()
                .Do((p, i) => p.Id = 501 + i)
                .Do((p, i) => p.Name = $"Person {i + 1}")
                .Build();
$vbLabelText   $csharpLabel

Aquí, el método All() asegura que las operaciones subsecuentes se apliquen a todos los 10 objetos de persona creados en memoria. El método Do() ejecuta el delegado Action en cada objeto Person. Esta configuración asigna la propiedad Id secuencialmente comenzando desde 501, y de manera similar, denomina a cada persona secuencialmente como "Persona 1" a "Persona 10".

NBuilder .NET (Cómo funciona para los desarrolladores): Figura 6 - Datos Secuenciales

Ejemplo 7: NBuilder con Pruebas Unitarias usando Xunit

NBuilder en .NET se utiliza significativamente en entornos de prueba, donde los desarrolladores necesitan generar un conjunto realista y diverso de datos para las pruebas. Facilita las pruebas haciéndolas fáciles y mantenibles con objetos complejos que permiten a los desarrolladores definir lógica de inicialización personalizada usando expresiones lambda y funciones delegadas para aquellos interesados en la generación eficiente y flexible de datos de prueba.

Clase modelo y servicio para pruebas unitarias

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;
    }
}
$vbLabelText   $csharpLabel

Aquí, la clase Person tiene varias propiedades como Id, Nombre, Correo Electrónico y Estado Civil, mientras que PersonService contiene un método GetPersonEmail() que devuelve el correo electrónico de un Person dado.

Clases de prueba y datos de prueba

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);
     }
}
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);
     }
}
$vbLabelText   $csharpLabel

Esta prueba unitaria verifica que el método GetPersonEmail de la clase PersonService devuelve correctamente la dirección de correo electrónico de un objeto Person con el correo electrónico esperado "Tom@email.com". Utiliza el patrón Arrange-Act-Assert para configurar los datos de prueba, ejecutar el método y luego verificar que el resultado actual coincida con el resultado esperado.

Integración de NBuilder con IronPDF

Aprende sobre IronPDF es una poderosa biblioteca en C# diseñada para crear PDFs desde HTML dentro de aplicaciones .NET. Con su API intuitiva, los desarrolladores pueden integrar funcionalidad PDF sin problemas en sus proyectos, ya sea que estén generando facturas, informes o formularios interactivos.

NBuilder .NET (Cómo funciona para los desarrolladores): Figura 7 - IronPDF

Instalación de IronPDF

Abra la consola del Administrador de Paquetes NuGet, y ejecute el siguiente comando:

Install-Package IronPdf

Rellenar la lista de 5 objetos Persona

// 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();
$vbLabelText   $csharpLabel

Creación de un documento PDF con IronPDF

Este código establece la clave de licencia de IronPDF y genera contenido HTML a partir de una lista de objetos Persona.

// 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
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>";
}
$vbLabelText   $csharpLabel

La IronPdf.License.LicenseKey se establece con una clave de licencia específica para habilitar las características de IronPDF. El contenido HTML se construye dinámicamente iterando sobre la lista people, agregando los detalles de cada objeto Person (Id, Nombre, Correo Electrónico, Estado Civil) a la estructura HTML.

Renderización de la lista de personas en un documento PDF utilizando IronPDF

Este código convierte contenido HTML a un documento PDF usando el ChromePdfRenderer de IronPDF.

// 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
var renderer = new ChromePdfRenderer();
var pdfDoc = renderer.RenderHtmlAsPdf(htmlContent);
pdfDoc.SaveAs("PersonList.pdf");
$vbLabelText   $csharpLabel

ChromePdfRenderer se instancia para renderizar el contenido HTML almacenado en htmlContent en un documento PDF. El documento PDF resultante se guarda en el sistema de archivos con el nombre "PersonList.pdf".

Producción

A continuación se muestra la salida de la PersonList generada por IronPDF. Contiene cinco personas, cada una con valores predeterminados.

NBuilder .NET (Cómo funciona para los desarrolladores): Figura 8 - Salida PDF

Conclusión

En conclusión, NBuilder es una herramienta robusta y flexible para generar datos de prueba en .NET, agilizando la creación de gráficos de objetos complejos y mejorando la eficiencia de los procesos de prueba. Al integrarse con IronPDF, los desarrolladores pueden extender fácilmente sus aplicaciones para incluir capacidades de generación de PDF para aquellos que lo consideren valioso para sus proyectos. Juntos, NBuilder e IronPDF pueden mejorar significativamente los flujos de trabajo de desarrollo, haciendo que las pruebas y la generación de documentos sean fluidas y eficientes.

Preguntas Frecuentes

¿Cómo puedo generar datos de prueba usando NBuilder en .NET?

NBuilder proporciona una interfaz fluida que permite a los desarrolladores generar gráficos de objetos complejos y datos de prueba sin esfuerzo. Puede usar métodos como CreateNew() y CreateListOfSize() para generar objetos individuales o listas de objetos con valores predeterminados o personalizados.

¿Cómo instalo NBuilder en un proyecto .NET?

Para instalar NBuilder, puede usar la Consola del Administrador de Paquetes NuGet con el comando: Install-Package NBuilder. Esto descargará e instalará NBuilder junto con sus dependencias necesarias.

¿Puede NBuilder usarse para generar datos aleatorios y secuenciales?

Sí, NBuilder admite la generación de datos tanto aleatorios como secuenciales. Puede personalizar las propiedades de los objetos con métodos como With() para valores aleatorios o usar Do() para establecer propiedades de forma secuencial.

¿Cuáles son los beneficios de integrar NBuilder con IronPDF?

La integración de NBuilder con IronPDF permite a los desarrolladores crear datos de prueba complejos y exportarlos como PDFs. Esto puede mejorar las aplicaciones .NET al permitir la generación dinámica de PDFs a partir de datos de prueba, agilizando los flujos de trabajo de desarrollo.

¿Cómo ayuda NBuilder en las pruebas unitarias?

NBuilder es valioso en las pruebas unitarias al permitir a los desarrolladores generar rápidamente datos de prueba realistas. Simplifica la configuración de escenarios de prueba con gráficos de objetos complejos, haciendo que las pruebas sean más mantenibles y efectivas.

¿Cuál es la ventaja de usar una interfaz fluida en NBuilder?

La interfaz fluida en NBuilder permite a los desarrolladores encadenar llamadas a métodos para crear gráficos de objetos complejos de manera legible y concisa. Esto mejora la claridad del código y reduce el código redundante al generar datos de prueba.

¿Cómo puedo crear una lista de objetos con NBuilder?

Puede crear una lista de objetos usando el método CreateListOfSize() de NBuilder. Por ejemplo, Builder.CreateListOfSize(10).Build() genera una lista de 10 objetos Person.

¿Cuáles son algunos consejos para resolver problemas al usar NBuilder?

Asegúrese de que NBuilder esté correctamente instalado a través de NuGet y verifique que las referencias de su proyecto estén actualizadas. Si encuentra problemas, consultar el repositorio de NBuilder en GitHub o los foros comunitarios puede proporcionar ideas y soluciones útiles.

Jacob Mellor, Director de Tecnología @ Team Iron
Director de Tecnología

Jacob Mellor es Director de Tecnología en Iron Software y un ingeniero visionario que lidera la tecnología PDF en C#. Como el desarrollador original detrás de la base de código central de Iron Software, ha moldeado la arquitectura de productos de la compañía desde ...

Leer más