xUnit / NUnit para C# (.NET): guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es esta biblioteca y para qué sirve?

\n\n

xUnit y NUnit son las dos bibliotecas más populares para pruebas unitarias (unit testing) en el ecosistema .NET (C#, F#, VB.NET). Permiten a los desarrolladores escribir pruebas automáticas que verifican la corrección del funcionamiento de módulos individuales del programa (clases, métodos, funciones).

\n\n

¿Para qué sirve?

\n
    \n
  • Detección temprana de errores: Las pruebas se ejecutan después de cada cambio en el código, lo que permite identificar inmediatamente regresiones (cuando el código nuevo rompe la funcionalidad anterior).
  • \n
  • Refactorización sin miedo: Puede reescribir el código con confianza si está seguro de que las pruebas lo cubren. Si las pruebas pasan, todo funciona como antes.
  • \n
  • Documentación en acción: Las pruebas muestran exactamente cómo se debe usar un método determinado, qué parámetros acepta y qué devuelve.
  • \n
  • Integración CI/CD: Las pruebas se ejecutan automáticamente en los servidores de compilación (GitHub Actions, Azure DevOps, Jenkins) antes del despliegue.
  • \n
\n\n

Diferencia entre xUnit y NUnit:

\n
    \n
  • NUnit — es una biblioteca más antigua (puerto de Java JUnit), utiliza los atributos [Test], [SetUp], [TearDown]. Tiene un rico conjunto de atributos para parametrización.
  • \n
  • xUnit — es una biblioteca más moderna, creada por el autor de NUnit. Utiliza el atributo [Fact] para pruebas normales y [Theory] para pruebas parametrizadas. Se distingue por un enfoque más estricto en el aislamiento de pruebas (cada prueba es una nueva instancia de la clase).
  • \n
\n\n

En este artículo revisaremos ambas bibliotecas, pero nos centraremos principalmente en xUnit, ya que Microsoft la recomienda para nuevos proyectos.

\n\n

Instalación

\n\n

La instalación se realiza a través del administrador de paquetes NuGet. Puede usar la consola del administrador de paquetes (Package Manager Console) o la CLI de .NET.

\n\n

Instalación de xUnit

\n
// A través de .NET CLI\ndotnet add package xunit\ndotnet add package xunit.runner.visualstudio\n\n// A través de Package Manager Console\nInstall-Package xunit\nInstall-Package xunit.runner.visualstudio
\n\n

Instalación de NUnit

\n
// A través de .NET CLI\ndotnet add package NUnit\ndotnet add package NUnit3TestAdapter\n\n// A través de Package Manager Console\nInstall-Package NUnit\nInstall-Package NUnit3TestAdapter
\n\n

Importante: Para ejecutar pruebas en Visual Studio o Rider, también es necesario instalar un adaptador del ejecutor de pruebas (por ejemplo, xunit.runner.visualstudio o NUnit3TestAdapter).

\n\n

Inicio rápido con ejemplo de código

\n\n

Supongamos que tenemos una clase simple Calculator con el método Add. Escribamos pruebas para ella en xUnit y NUnit.

\n\n

Clase a probar (Calculator.cs)

\n
public class Calculator\n{\n    public int Add(int a, int b)\n    {\n        return a + b;\n    }\n\n    public int Divide(int a, int b)\n    {\n        if (b == 0)\n            throw new DivideByZeroException("¡No se puede dividir por cero!");\n        return a / b;\n    }\n}
\n\n

Prueba en xUnit (CalculatorTests.cs)

\n
using Xunit;\n\npublic class CalculatorTests\n{\n    [Fact]\n    public void Add_ShouldReturnSum_WhenTwoPositiveNumbers()\n    {\n        // Arrange (Preparación)\n        var calculator = new Calculator();\n        int a = 5;\n        int b = 3;\n\n        // Act (Acción)\n        int result = calculator.Add(a, b);\n\n        // Assert (Verificación)\n        Assert.Equal(8, result);\n    }\n\n    [Fact]\n    public void Divide_ShouldThrowException_WhenDivideByZero()\n    {\n        var calculator = new Calculator();\n\n        Assert.Throws<DivideByZeroException>(() => calculator.Divide(10, 0));\n    }\n}
\n\n

Prueba en NUnit (CalculatorTest

Recommendations