AYUDA .NET

Pruebas unitarias en C# (cómo funcionan para los desarrolladores)

Actualizado 3 de abril, 2024
Compartir:

Introducción a las pruebas unitarias en C#

**Pruebas unitarias es una fase crítica en el desarrollo de software, que ayuda a los desarrolladores a verificar la funcionalidad de las unidades individuales del código fuente. En C#, las pruebas unitarias garantizan que cada componente o método funcione correctamente en distintas condiciones. Al aislar cada parte del programa y demostrar que las partes individuales están libres de errores, las pruebas unitarias contribuyen significativamente a la fiabilidad de su aplicación. En este artículo, exploraremos los fundamentos del proyecto C# Unit Test y Biblioteca IronPDF.

Configuración de la primera prueba unitaria en Visual Studio

Creación de un proyecto de pruebas unitarias

Para empezar con las pruebas unitarias en C#, tendrá que configurar uno de los proyectos de pruebas unitarias en Visual Studio. Visual Studio proporciona un marco de pruebas unitarias integrado, lo que hace que sea un comienzo sencillo. Cuando cree un nuevo proyecto, seleccione la plantilla "Proyecto de prueba unitaria" en la categoría C#. Esta plantilla configura todo lo necesario para crear pruebas unitarias y ejecutarlas con eficacia.

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
namespace Unit_Test_Project_Example
{
    public class Calculator
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
    }
    [TestClass]
    public class CalculatorTests
    {
        [TestMethod]
        public void Add_ShouldReturnCorrectSum()
        {
            //  Organice
            var calculator = new Calculator();
            //  Actuar
            var result = calculator.Add(2, 2);
            //  Afirme
            Assert.AreEqual(4, result);
        }
    }
}
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
namespace Unit_Test_Project_Example
{
    public class Calculator
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
    }
    [TestClass]
    public class CalculatorTests
    {
        [TestMethod]
        public void Add_ShouldReturnCorrectSum()
        {
            //  Organice
            var calculator = new Calculator();
            //  Actuar
            var result = calculator.Add(2, 2);
            //  Afirme
            Assert.AreEqual(4, result);
        }
    }
}
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports System
Namespace Unit_Test_Project_Example
	Public Class Calculator
		Public Function Add(ByVal a As Integer, ByVal b As Integer) As Integer
			Return a + b
		End Function
	End Class
	<TestClass>
	Public Class CalculatorTests
		<TestMethod>
		Public Sub Add_ShouldReturnCorrectSum()
			'  Organice
			Dim calculator As New Calculator()
			'  Actuar
			Dim result = calculator.Add(2, 2)
			'  Afirme
			Assert.AreEqual(4, result)
		End Sub
	End Class
End Namespace
VB   C#

Comprender los métodos de ensayo y las clases de ensayo

En un proyecto de pruebas unitarias, las pruebas se organizan en clases y métodos. Una clase de prueba representa una colección de métodos de prueba unitarios que deben ejecutarse juntos. Cada método de prueba unitario, decorado con el [TestMethod], contiene la lógica para probar una función específica de su código. La propia clase de prueba está marcada con el símbolo .[TestClass], que indica al marco de pruebas que contiene pruebas para ejecutar.

Ejecución y comprensión de las pruebas

Uso del explorador de pruebas en Visual Studio

La ventana Explorador de pruebas de Visual Studio es su eje central para ejecutar y gestionar todos los métodos de prueba. Puede ejecutar todas las pruebas, una selección de pruebas o pruebas individuales. Después de ejecutar las pruebas, el Explorador de pruebas ofrece un resumen detallado de las pruebas superadas y fallidas, lo que le permite identificar y solucionar rápidamente los problemas.

Interpretación de los resultados de las pruebas

  • Pruebas superadas: Estas pruebas se ejecutaron correctamente, lo que indica que el código probado se comporta como se esperaba en las condiciones especificadas.
  • Pruebas fallidas: Indican una discrepancia entre los resultados esperados y los reales, señalando posibles errores o malentendidos en los requisitos o el código de prueba.

    Es esencial investigar las pruebas fallidas con prontitud, ya que pueden proporcionar señales tempranas de advertencia de problemas en su código base.

    Pruebas unitarias en C# (cómo funcionan para los desarrolladores): Figura 1 - Ejemplo de una prueba unitaria superada en Visual Studio

Técnicas avanzadas y mejores prácticas para escribir C# Pruebas unitarias

Más allá de escribir y ejecutar pruebas, dominar las pruebas unitarias en C# implica comprender algunas técnicas avanzadas y buenas prácticas. Estos enfoques pueden ayudarle a escribir pruebas más eficientes y eficaces, garantizando que su aplicación sea fiable y mantenible.

Organizar eficazmente los exámenes

Una buena organización es clave para mantener un gran conjunto de pruebas. Agrupe sus pruebas lógicamente por la funcionalidad que cubren. Utilice nombres descriptivos para sus métodos de prueba y clases para indicar lo que cada prueba está verificando. Este enfoque facilita la búsqueda y comprensión de las pruebas más adelante, especialmente a medida que crece el conjunto de pruebas.

Simulación e inyección de dependencias

A menudo, el código que está probando interactúa con recursos externos u otras partes de su aplicación. En estos casos, utilice frameworks de simulación como Moq o NSubstitute para crear objetos simulados. Estos "stand-ins" imitan el comportamiento de los objetos reales, lo que le permite probar su código de forma aislada. La inyección de dependencias hace que su código sea más comprobable, ya que le permite sustituir las dependencias reales por mocks o stubs durante las pruebas.

//  Ejemplo de utilización de un simulacro
[TestClass]
public class ProductServiceTests
{
    [TestMethod]
    public void GetProductById_ShouldReturnCorrectProduct()
    {
        //  Organice
        var mockRepository = new Mock<IProductRepository>();
        mockRepository.Setup(x => x.FindById(1)).Returns(new Product { Id = 1, Name = "Laptop" });
        ProductService productService = new ProductService(mockRepository.Object);
        //  Actuar
        Product result = productService.GetProductById(1);
        //  Afirme
        Assert.IsNotNull(result);
        Assert.AreEqual("Laptop", result.Name);
    }
}
//  Ejemplo de utilización de un simulacro
[TestClass]
public class ProductServiceTests
{
    [TestMethod]
    public void GetProductById_ShouldReturnCorrectProduct()
    {
        //  Organice
        var mockRepository = new Mock<IProductRepository>();
        mockRepository.Setup(x => x.FindById(1)).Returns(new Product { Id = 1, Name = "Laptop" });
        ProductService productService = new ProductService(mockRepository.Object);
        //  Actuar
        Product result = productService.GetProductById(1);
        //  Afirme
        Assert.IsNotNull(result);
        Assert.AreEqual("Laptop", result.Name);
    }
}
'  Ejemplo de utilización de un simulacro
<TestClass>
Public Class ProductServiceTests
	<TestMethod>
	Public Sub GetProductById_ShouldReturnCorrectProduct()
		'  Organice
		Dim mockRepository = New Mock(Of IProductRepository)()
		mockRepository.Setup(Function(x) x.FindById(1)).Returns(New Product With {
			.Id = 1,
			.Name = "Laptop"
		})
		Dim productService As New ProductService(mockRepository.Object)
		'  Actuar
		Dim result As Product = productService.GetProductById(1)
		'  Afirme
		Assert.IsNotNull(result)
		Assert.AreEqual("Laptop", result.Name)
	End Sub
End Class
VB   C#

Pruebas basadas en datos

Las pruebas basadas en datos permiten ejecutar el mismo método de prueba varias veces con diferentes datos de entrada. Esta técnica es especialmente útil para probar una amplia gama de entradas y escenarios sin escribir múltiples métodos de prueba. Visual Studio es compatible con las pruebas basadas en datos, ya que permite especificar los datos de prueba a partir de diversas fuentes, como datos en línea, archivos CSV o bases de datos.

Comprender y utilizar eficazmente las afirmaciones

Las afirmaciones son el corazón de sus métodos de prueba, ya que validan los resultados de sus pruebas. Conozca la gama de métodos assert disponibles en su marco de pruebas y utilícelos adecuadamente para comprobar valores esperados, excepciones o condiciones. Utilizar la afirmación adecuada puede hacer que sus pruebas sean más claras y sólidas.

Integración continua y automatización de pruebas

Integre sus pruebas unitarias en su integración continua (CI) pipeline. De este modo, las pruebas se ejecutan automáticamente cada vez que se realizan cambios en el código base, lo que ayuda a detectar y solucionar los problemas en una fase temprana. La automatización también facilita la ejecución de pruebas con frecuencia y coherencia, lo que es crucial para mantener una base de código saludable.

Sincronización de pruebas y código de producción

Sus pruebas unitarias son tan buenas como su alineación con el código de producción. Asegúrese de que cualquier cambio en la funcionalidad se refleje en las pruebas unitarias correspondientes. Esta práctica evita que las pruebas obsoletas pasen de forma incorrecta y garantiza que el conjunto de pruebas represente con precisión el estado de la aplicación.

Aprender de los exámenes fallidos

Cuando una prueba falla, es una oportunidad para aprender y mejorar. Una prueba fallida puede revelar comportamientos inesperados, suposiciones incorrectas o áreas de su código que son más complejas y propensas a errores de lo necesario. Analice detenidamente las pruebas que fallan para comprender sus causas subyacentes y utilice esta información para mejorar tanto las pruebas como el código de producción.

Presentación de IronPDF

Pruebas unitarias en C# (cómo funcionan para los desarrolladores): Figura 2 - Sitio web de IronPDF

IronPDF es una completa biblioteca diseñada para desarrolladores .NET, que les permite generar, manipular y leer documentos PDF en sus aplicaciones. IronPDF es conocido por su capacidad para generar PDF directamente desde HTML código, CSS, imágenes y JavaScript para crear los mejores PDF. Es compatible con un amplio espectro de tipos de proyectos .NET y entornos de aplicaciones, incluidas aplicaciones web y de escritorio, servicios y mucho más, en varios sistemas operativos como Windows, Linux y macOS, así como en entornos Docker y en la nube como Azure y AWS.

Ejemplo de código

He aquí un ejemplo de cómo podría utilizar IronPDF en un escenario de pruebas unitarias de C#. Supongamos que desea probar una función que genera un PDF a partir de contenido HTML. Puede utilizar IronPDF para convertir el HTML en un PDF y, a continuación, verificar la existencia o el contenido del PDF como parte de la prueba:

using IronPdf;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.ComponentModel;
using System.IO;
[TestClass]
public class PdfGenerationTests
{
    [TestMethod]
    public void TestHtmlToPdfGeneration()
    {
        IronPdf.License.LicenseKey = "License-Key";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, world!</h1>");
        string filePath = Path.Combine(Path.GetTempPath(), "test.pdf");
        pdf.SaveAs(filePath);
        Assert.IsTrue(File.Exists(filePath), "The generated PDF does not exist.");
        //  Aquí podrían añadirse aserciones adicionales para verificar el contenido del PDF
        //  Limpieza
        File.Delete(filePath);
    }
}
using IronPdf;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.ComponentModel;
using System.IO;
[TestClass]
public class PdfGenerationTests
{
    [TestMethod]
    public void TestHtmlToPdfGeneration()
    {
        IronPdf.License.LicenseKey = "License-Key";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, world!</h1>");
        string filePath = Path.Combine(Path.GetTempPath(), "test.pdf");
        pdf.SaveAs(filePath);
        Assert.IsTrue(File.Exists(filePath), "The generated PDF does not exist.");
        //  Aquí podrían añadirse aserciones adicionales para verificar el contenido del PDF
        //  Limpieza
        File.Delete(filePath);
    }
}
Imports IronPdf
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports System
Imports System.ComponentModel
Imports System.IO
<TestClass>
Public Class PdfGenerationTests
	<TestMethod>
	Public Sub TestHtmlToPdfGeneration()
		IronPdf.License.LicenseKey = "License-Key"
		Dim renderer = New ChromePdfRenderer()
		Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello, world!</h1>")
		Dim filePath As String = Path.Combine(Path.GetTempPath(), "test.pdf")
		pdf.SaveAs(filePath)
		Assert.IsTrue(File.Exists(filePath), "The generated PDF does not exist.")
		'  Aquí podrían añadirse aserciones adicionales para verificar el contenido del PDF
		'  Limpieza
		File.Delete(filePath)
	End Sub
End Class
VB   C#

Este ejemplo muestra una prueba unitaria sencilla que utiliza IronPDF para generar un PDF a partir de una cadena HTML, guardarlo en un archivo temporal y, a continuación, verificar la existencia del archivo.

Pruebas unitarias en C# (cómo funcionan para los desarrolladores): Figura 3 - Prueba anterior superada

Conclusión

Pruebas unitarias en C# (Cómo funciona para los desarrolladores): Figura 4 - Página de licencias de IronPDF

Las pruebas unitarias son una parte indispensable del ciclo de vida del desarrollo de software. Configurando y escribiendo pruebas eficaces, ejecutándolas a través del Explorador de pruebas de Visual Studio y utilizando herramientas de cobertura de código, se asegurará de que sus aplicaciones C# sean fiables y mantengan unos estándares de alta calidad. Si comprende y aplica los principios del desarrollo basado en pruebas, podrá mejorar aún más la calidad de sus proyectos de pruebas unitarias en C#. Recuerde que el objetivo de las pruebas unitarias no es sólo encontrar errores, sino crear una base sólida para su aplicación que facilite las actualizaciones, la depuración y la adición de funciones. IronPDF con opciones de licencia a partir de $749.

< ANTERIOR
Patrón CQRS C# (Cómo funciona para desarrolladores)
SIGUIENTE >
C# URL Encode (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,974,197 Ver licencias >
123