AYUDA .NET

AutoFixture C# (Cómo funciona para desarrolladores)

Actualizado agosto 13, 2024
Compartir:

AutoFixture es una biblioteca de código abierto para .NET cuyo objetivo es minimizar la fase "Organizar" de la escritura de pruebas unitarias, mejorando así la gestión de las pruebas. Su principal objetivo es permitir a los desarrolladores concentrarse en lo que están probando, en lugar del proceso de configuración, permitiéndoles crear gráficos de objetos con datos de prueba. Este artículo explora cómo AutoFixture puede utilizarse para facilitar el desarrollo dirigido por pruebas mediante la generación eficiente de datos de prueba.

Introducción

AutoFixture es una potente biblioteca en C# diseñada para agilizar el proceso de creación de datos de prueba para pruebas unitarias. Ayuda a los desarrolladores a evitar la escritura de código de configuración repetitivo mediante la generación automática de datos para los casos de prueba. En las pruebas unitarias, AutoFixture proporciona un enfoque racionalizado para generar datos de prueba, garantizando que cada prueba unitaria se ejecute con entradas variadas y realistas. AutoFixture hace que las pruebas en C# sean más eficientes al generar automáticamente datos de prueba, reduciendo la necesidad de configuración manual.

AutoFixture C# (Cómo funciona para desarrolladores): Figura 1 - AutoFixture

Instalación y configuración de AutoFixture

Autofixture está disponible como paquete NuGet y puede instalarse. Esto se puede hacer utilizando la consola de NuGet Package Manager o el paquete .NET añadir la interfaz de usuario de NuGet Package Manager de Visual Studio.

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

NuGet descargará e instalará la última versión de AutoFixture y sus dependencias en tu proyecto.

Ejemplo de creación de datos de prueba para una clase

Supongamos que tenemos una simple clase de empleado con propiedades como Nombre, Apellidos y Edad. En lugar de crear manualmente instancias de esta nueva clase fixture en nuestras pruebas unitarias, podemos aprovechar AutoFixture para que genere datos aleatorios por nosotros.

public class Employee
  {
      public string FirstName { get; set; }
      public string LastName { get; set; }
      public int Age { get; set; }
      public Employee(string firstName, string lastName, int age)
      {
          FirstName = firstName;
          LastName = lastName;
          Age = age;
      }
      public string GetFullName() => $"{FirstName} {LastName}";
  }
public class Employee
  {
      public string FirstName { get; set; }
      public string LastName { get; set; }
      public int Age { get; set; }
      public Employee(string firstName, string lastName, int age)
      {
          FirstName = firstName;
          LastName = lastName;
          Age = age;
      }
      public string GetFullName() => $"{FirstName} {LastName}";
  }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Descripción del Código

Ahora, la clase Empleado encapsula detalles esenciales de un empleado, incluyendo su nombre, apellido y edad, representados por las propiedades Nombre, Apellido y Edad respectivamente. Su constructor facilita la instanciación de un objeto empleado aceptando estos detalles como parámetros y asignándolos a las propiedades correspondientes. Además, el método GetFullName concatena el nombre y apellidos del empleado, devolviendo el nombre completo como una cadena.

Configuración del código para nuestro escenario de prueba

A continuación, crearemos el código para probarlo:

using AutoFixture;
public class EmployeeTests
{
    private readonly IFixture _fixture;
    public EmployeeTests()
    {
        _fixture = new Fixture(); // var fixture
    }
}
using AutoFixture;
public class EmployeeTests
{
    private readonly IFixture _fixture;
    public EmployeeTests()
    {
        _fixture = new Fixture(); // var fixture
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Descripción del Código

Este fragmento de código incorpora AutoFixture a las pruebas unitarias de la clase Empleado. Al importar el espacio de nombres AutoFixture, los desarrolladores acceden a la funcionalidad de generación de datos. El campo _fixture inicializado con una nueva instancia Fixture en el constructor, agiliza la creación de datos de prueba. Esta configuración mejora la eficacia y fiabilidad de las pruebas para una cobertura completa de la clase Empleado.

Ejemplo 1: Validación de los valores de los objetos del caso de prueba del empleado

[Fact]
    public void Employee_ShouldHaveValidValues()
    {
        // Arrange
        var firstName = _fixture.Create<string>();
        var lastName = _fixture.Create<string>();
        var age = _fixture.Create<int>();
        // Act
        var employee = new Employee(firstName, lastName, age);
        // Assert
        Assert.Equal(firstName, employee.FirstName);
        Assert.Equal(lastName, employee.LastName);
        Assert.Equal(age, employee.Age);
    }
[Fact]
    public void Employee_ShouldHaveValidValues()
    {
        // Arrange
        var firstName = _fixture.Create<string>();
        var lastName = _fixture.Create<string>();
        var age = _fixture.Create<int>();
        // Act
        var employee = new Employee(firstName, lastName, age);
        // Assert
        Assert.Equal(firstName, employee.FirstName);
        Assert.Equal(lastName, employee.LastName);
        Assert.Equal(age, employee.Age);
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Descripción del Código

El método de prueba Employee_ShouldHaveValidValues valida que la clase Employee inicializa correctamente sus propiedades con los valores proporcionados. Utilizando un fixture de prueba para generar datos aleatorios para el nombre, el apellido y la edad, la prueba crea una instancia de Empleado. A continuación, comprueba que las propiedades Nombre, Apellidos y Edad del objeto Empleado coinciden con los valores generados, asegurándose de que el constructor establece estas propiedades con precisión.

Ejemplo 2: Validación de Empleado al invocar al constructor

[Fact]
        public void CreateEmployee_ValidData_ReturnsEmployeeObject()
        {
            // Arrange
            var employee = _fixture.Create<Employee>();
            // Act 
            // Assert
            Assert.NotNull(employee);
            Assert.False(string.IsNullOrEmpty(employee.FirstName));
            Assert.NotNull(employee.LastName);
            Assert.True(employee.Age > 0);
        }
[Fact]
        public void CreateEmployee_ValidData_ReturnsEmployeeObject()
        {
            // Arrange
            var employee = _fixture.Create<Employee>();
            // Act 
            // Assert
            Assert.NotNull(employee);
            Assert.False(string.IsNullOrEmpty(employee.FirstName));
            Assert.NotNull(employee.LastName);
            Assert.True(employee.Age > 0);
        }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Descripción del Código

Este fragmento de código de prueba incluye aserciones de prueba que validan si las propiedades de un objeto Empleado coinciden con valores generados aleatoriamente. Verifica si las propiedades de tipo string de las propiedades string FirstName, string LastName e int Age coinciden con los valores generados aleatoriamente asignados a las variables firstName, lastName y age. Cualquier aserción fallida señala un desajuste entre los valores esperados y los valores aleatorios generados por los detalles del empleado.

AutoFixture C# (Cómo funciona para desarrolladores): Figura 2 - Prueba unitaria de datos válidos de empleados

Presentación de IronPDF

IronPDF es una robusta biblioteca PDF en C# desarrollada por Iron Software que facilita la lectura y creación de documentos PDF. Esta versátil herramienta permite convertir documentos fáciles de formatear, con información de estilo, en PDF de alta calidad. Con IronPDF, generar PDF a partir de texto HTML es un proceso fluido, que permite a los usuarios extraer contenido HTML de URL y transformarlo en archivos PDF bien estructurados. Esta capacidad convierte a IronPDF en una herramienta esencial para los desarrolladores que buscan automatizar y agilizar la creación de documentos PDF profesionales directamente a partir de contenido web.

AutoFixture C# (Cómo funciona para desarrolladores): Figura 3 - IronPDF

Instalación de IronPDF

Abra la consola de NuGet Package Manager y ejecute el siguiente comando:

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

Ejemplo de código utilizando las funciones de Autofixture con IronPDF

Primero crearemos una Clase EmployeePdfGenerator que contiene el método para generar Empleados.

using DemoAutofixture;
List<Employee> employees = new List<Employee>()
{
    new Employee("John","Smith",32){ },
    new Employee("Emily","Davis",18){ },
    new Employee("David","Brown",24){ },
    new Employee("Jane","Doe",16){ },
    new Employee("Michael","Johnson",49){ },
};
EmployeePdfGenerator pdfGenerator = new();
pdfGenerator.GeneratePdf(employees, "EmployeeList.pdf");
Console.WriteLine("PDF Created Successfully!");
public class EmployeePdfGenerator
{
    private readonly Fixture _fixture;
    public EmployeePdfGenerator()
    {
        _fixture = new Fixture();
    }
    public List<Employee> GenerateEmployees(int count)
    {
        return _fixture.CreateMany<Employee>(count).ToList();
    }
    public void GeneratePdf(List<Employee> employees, string filePath)
    {
     IronPdf.License.LicenseKey = "Your-License-Key-Here";
        var renderer = new ChromePdfRenderer();
        string htmlContent = GenerateHtml(employees);
        try
        {
            renderer.RenderHtmlAsPdf(htmlContent).SaveAs(filePath);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error generating PDF: {ex.Message}");
        }
    }
    private string GenerateHtml(List<Employee> employees)
    {
        StringBuilder htmlBuilder = new StringBuilder();
        htmlBuilder.Append("<!DOCTYPE html><html><head><title>Employee List</title></head><body><h1>Employee List</h1><ul>");
        foreach (var employee in employees)
        {
            htmlBuilder.Append($"<li>{employee.GetFullName()} - Age: {employee.Age}</li>");
        }
        htmlBuilder.Append("</ul></body></html>");
        return htmlBuilder.ToString();
    }
}
using DemoAutofixture;
List<Employee> employees = new List<Employee>()
{
    new Employee("John","Smith",32){ },
    new Employee("Emily","Davis",18){ },
    new Employee("David","Brown",24){ },
    new Employee("Jane","Doe",16){ },
    new Employee("Michael","Johnson",49){ },
};
EmployeePdfGenerator pdfGenerator = new();
pdfGenerator.GeneratePdf(employees, "EmployeeList.pdf");
Console.WriteLine("PDF Created Successfully!");
public class EmployeePdfGenerator
{
    private readonly Fixture _fixture;
    public EmployeePdfGenerator()
    {
        _fixture = new Fixture();
    }
    public List<Employee> GenerateEmployees(int count)
    {
        return _fixture.CreateMany<Employee>(count).ToList();
    }
    public void GeneratePdf(List<Employee> employees, string filePath)
    {
     IronPdf.License.LicenseKey = "Your-License-Key-Here";
        var renderer = new ChromePdfRenderer();
        string htmlContent = GenerateHtml(employees);
        try
        {
            renderer.RenderHtmlAsPdf(htmlContent).SaveAs(filePath);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error generating PDF: {ex.Message}");
        }
    }
    private string GenerateHtml(List<Employee> employees)
    {
        StringBuilder htmlBuilder = new StringBuilder();
        htmlBuilder.Append("<!DOCTYPE html><html><head><title>Employee List</title></head><body><h1>Employee List</h1><ul>");
        foreach (var employee in employees)
        {
            htmlBuilder.Append($"<li>{employee.GetFullName()} - Age: {employee.Age}</li>");
        }
        htmlBuilder.Append("</ul></body></html>");
        return htmlBuilder.ToString();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

AutoFixture C# (Cómo funciona para desarrolladores): Figura 4 - Autofixture con salida IronPDF

Descripción del Código

El código C# proporcionado utiliza la biblioteca IronPDF para generar un documento PDF con la lista de empleados y sus edades. Define una clase EmployeePdfGenerator y contiene el método GeneratePdf, que toma una lista de objetos Employee y una ruta de archivo. Internamente, construye contenido HTML a través del método GenerateHtml, luego utiliza la clase HtmlToPdf de IronPDF para renderizar este HTML como un PDF, guardado en la ruta de archivo especificada. Las mejoras incluyen el uso de StringBuilder para la generación de HTML y la adición de un tratamiento básico de errores para la generación de PDF y el guardado de archivos.

Redacción de un método de ensayo

En la siguiente configuración, AutoFixture se utiliza para crear instancias de la clase Empleado, permitiendo la generación de datos aleatorios para las pruebas. IronPDF se emplea para convertir sin problemas contenidos HTML, incluida la información de los empleados, en formato PDF. La clase EmployeePdfGenerator orquesta estos procesos, gestionando eficazmente tanto la generación de datos como la conversión a PDF. Por su parte, la clase de prueba EmployeePdfGeneratorTests XUnit garantiza el correcto funcionamiento de la generación de PDF mediante rigurosas pruebas. Este enfoque integrado simplifica la generación y documentación de los datos de los empleados, garantizando la solidez y fiabilidad del proceso de generación de PDF.

using System;
using System.IO;
using Xunit; 
public class EmployeePdfGeneratorTests
{
    [Fact]
    public void GeneratePdf_GeneratesPdfFile()
    {
        // Arrange
        var generator = new EmployeePdfGenerator();
        var employees = generator.GenerateEmployees(5);
        string filePath = "EmployeeList.pdf";
        // Act
        generator.GeneratePdf(employees, filePath);
        // Assert
        Assert.True(File.Exists(filePath));
    }
}
using System;
using System.IO;
using Xunit; 
public class EmployeePdfGeneratorTests
{
    [Fact]
    public void GeneratePdf_GeneratesPdfFile()
    {
        // Arrange
        var generator = new EmployeePdfGenerator();
        var employees = generator.GenerateEmployees(5);
        string filePath = "EmployeeList.pdf";
        // Act
        generator.GeneratePdf(employees, filePath);
        // Assert
        Assert.True(File.Exists(filePath));
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Aquí la clase EmployeePdfGeneratorTests contiene casos de prueba para la clase Employee que validó PDF en la ruta del archivo.

AutoFixture C# (Cómo funciona para desarrolladores): Figura 5 - AutoFixture C#

Conclusión

AutoFixture simplifica la fase "Organizar" de la escritura de pruebas unitarias en .NET, ofreciendo a los desarrolladores un medio para centrarse en los casos de prueba en lugar de en las complejidades de la configuración. Agiliza el proceso de pruebas unitarias, garantizando entradas variadas y realistas mediante la generación automática de datos de prueba. En colaboración con IronPDF para su uso y apoyo continuados.

< ANTERIOR
HttpListener C# (Cómo Funciona Para Desarrolladores)
SIGUIENTE >
Entity Framework Core (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.9 acaba de salir

Descarga gratuita de NuGet Descargas totales: 10,516,730 View Licenses >