domingo, 5 de octubre de 2025

Programando en C# no.10 (usando xUnit)

Las pruebas unitarias nos ayudan a validar el funcionamiento de nuestro código. Se basan en el TDD o desarrollo basado en pruebas.

La filosofía del TDD se basa en:

  1. Escribir pruebas que fallen, se le da un color rojo. 
  2. Escribir pruebas que pasen, en color verde. 
  3. Refactorización, en azul.

Nosotros usaremos xUnit.

xUnit.net es una herramienta de prueba unitaria gratuita y de código abierto para .NET Framework (que se puede usar para C#, F# o Visual Basic).

Es similar a JUnit, pero para proyectos .NET.

Podemos hacer una breve comparativa.

Concepto xUnit (.NET/C#) JUnit (Java)
Lenguaje  C#  Java
Anotación de prueba [Fact] [Theory] @Test
Assert  Assert.Equal(), Assert.True()  Assertions.assertEquals(), etc.
Setup/Teardown  Constructor, IDisposable  @BeforeEach, @AfterEach
Organización  Por clase y métodos públicos  Por clase y métodos anotados
Ejecución  dotnet test  mvn test, gradle test, etc.

Instalamos algunos paquetes necesarios con Nuget (solo en caso de no tenerlos):

$ dotnet add package xunit
$ dotnet add package xunit.runner.visualstudio
$ dotnet add package Microsoft.NET.Test.Sdk

Comenzemos con una prueba sencilla. Una clase tiene un método para sumar dos números enteros. Crearemos una sencilla prueba para probar ese método.

1. Crear directorio del proyecto y ubicarnos en el.

$ mkdir Calculadora
$ cd Calculadora

2. Crear una solución con este comando:

$ dotnet new sln

3. Crear un proyecto de biblioteca:

$ dotnet new classlib -n Calculadora.Core

En este crearemos una clase llamada ``Calculadora.cs`` que tendrá el método de la suma de dos números enteros (y que posteriormente pondremos a prueba).

namespace Calculadora.Core;

public class Calculadora
{
    public int Sumar(int a, int b)
    {
        return a + b;
    }
}

4. Crear un proyecto de pruebas:

$ dotnet new xunit -n Calculadora.Tests

En este crearemos una clase ``CalculadoraTests.cs`` donde escribiremos dos métodos para probar el método de suma de la clase anterior.

using Xunit;
using Calculadora.Core; 

namespace Calculadora.Tests;

public class CalculadoraTests
{
    [Fact]
    public void Sumar_DosNumerosEnteros_RetornaSumaCorrecta()
    {
        // Arrange
        var calculadora = new Calculadora.Core.Calculadora(); 
        int a = 3;
        int b = 5;
        int esperado = 8;

        // Act
        int resultado = calculadora.Sumar(a, b);

        // Assert
        Assert.Equal(esperado, resultado);
    }

    [Fact]
    public void Sumar_NumerosNegativos_RetornaSumaCorrecta()
    {
        // Arrange
        var calculadora = new Calculadora.Core.Calculadora(); 
        int a = -2;
        int b = -3;
        int esperado = -5;

        // Act
        int resultado = calculadora.Sumar(a, b);

        // Assert
        Assert.Equal(esperado, resultado);
    }
}

Para los programadores Java que han usado JUnit esto les parecerá familiar.

5. Agregamos ambos proyectos a la solución:

$ dotnet sln add Calculadora.Core/Calculadora.Core.csproj
$ dotnet sln add Calculadora.Tests/Calculadora.Tests.csproj

6. Agregamos una referencia del proyecto Calculadora.Core al proyecto de pruebas Calculadora.Tests:

$ cd Calculadora.Tests
$ dotnet add reference ../Calculadora.Core/Calculadora.Core.csproj

7. Nos ubicamos en la raíz del proyecto (Calculadora):

Calculadora/
├── Calculadora.Core/
│   ├── Calculadora.cs
│   └── Calculadora.Core.csproj
├── Calculadora.Tests/
│   ├── CalculadoraTests.cs
│   └── Calculadora.Tests.csproj
└── Calculadora.sln

8. Abrimos una terminal y ejecutamos la prueba:

$ dotnet test

Salida:

Iniciando la ejecución de pruebas, espere...
1 archivos de prueba en total coincidieron con el patrón especificado.

Correctas! - Con error:     0, Superado:     2, Omitido:     0, Total:     2, Duración: 8 ms - Calculadora.Tests.dll (net8.0)

¡Hemos creado nuestras primeras pruebas unitarias con xUnit!

Si tienes problemas ejecuta estos comandos uo por uno para limpiar, compilar y ejecutar el proyecto:

$ dotnet clean
$ dotnet restore
$ dotnet build
$ dotnet test

Enlaces:

https://learn.microsoft.com/es-es/dotnet/core/testing/unit-testing-csharp-with-xunit
https://es.wikipedia.org/wiki/XUnit
https://xunit.net/?tabs=cs
https://dev.to/maadcode/introduccion-a-xunit-una-poderosa-herramienta-para-unit-testing-en-net-34b0

No hay comentarios:

Publicar un comentario

Programando en C# no.10 (usando xUnit)

Las pruebas unitarias nos ayudan a validar el funcionamiento de nuestro código. Se basan en el TDD o desarrollo basado en pruebas. La ...

Etiquetas

Archivo del blog