¿Por qué las pruebas en C# no dan miedo, sino que son beneficiosas?
\n\nSi apenas estás comenzando tu camino en C# y has oído que «un buen desarrollador siempre escribe pruebas», pero no tienes idea de por dónde empezar con este tema, has llegado al lugar indicado. Probar el código a menudo asusta a los principiantes: parece algo complicado que requiere un conocimiento profundo de la arquitectura y un montón de configuraciones. En realidad, escribir pruebas en C# es una habilidad que se puede aprender en una tarde, y sus beneficios durarán años.
\n\nImagina que has ensamblado un mecanismo complejo con miles de piezas. ¿No lo pondrías en marcha a máxima potencia sin verificar cada componente? Lo mismo ocurre con un programa: las pruebas unitarias en C# permiten verificar cada «pieza» de tu código por separado, sin esperar a que todo el sistema colapse en producción. En este artículo, analizaremos las pruebas en C# desde cero: desde la elección del framework hasta escribir tu primera prueba con sentido. ¡Allá vamos!
\n\nPor dónde empezar con las pruebas en C#: preparación del entorno
\n\nAntes de escribir código, asegurémonos de que tienes todo lo necesario. Para las pruebas en C# necesitarás:
\n- \n
- Visual Studio 2022 (Community edition — gratuita) o JetBrains Rider (si tienes licencia). \n
- .NET SDK (versión 6, 7 u 8 — cualquier LTS sirve). \n
- Comprensión básica de POO en C#: clases, métodos, interfaces. \n
Cuando el entorno esté listo, crea un nuevo proyecto. Recomiendo separar el código en dos proyectos: uno principal (tu biblioteca o aplicación) y uno de pruebas. En Visual Studio, esto se hace con el comando: File → New → Project → xUnit Test Project (.NET Core) o NUnit Test Project. Pero iremos un poco más allá y analizaremos ambas herramientas populares.
Elegir un framework: NUnit vs xUnit
\n\nEn el mundo de C# hay dos «jugadores» principales para escribir pruebas unitarias: NUnit y xUnit. Ambos funcionan muy bien, pero hay matices:
\n\n- \n
- NUnit — un clásico proveniente de Java (análogo a JUnit). Tiene atributos como
[Test],[SetUp],[TearDown]. Es muy claro para principiantes. \n - xUnit — un framework moderno de los creadores de ASP.NET. Usa
[Fact]y[Theory]. Se considera más «limpio» y se integra mejor con .NET Core. \n
Para principiantes, recomiendo xUnit — es más simple, no requiere atributos adicionales y es más fácil de entender. Pero si en tu equipo usan NUnit, no hay problema, veremos ambas opciones.
\n\nTu primera prueba unitaria en C#: escribiendo código
\n\nSupongamos que tenemos una clase Calculadora simple:
\n\npublic class Calculator\n{\n public int Add(int a, int b) => a + b;\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\nAhora escribamos pruebas para esta clase. Crearemos un proyecto de pruebas (xUnit) y añadiremos una referencia al proyecto principal.
\n\nEjemplo de prueba con xUnit
\n\nusing Xunit;\n\npublic class CalculatorTests\n{\n [Fact]\n public void Add_ShouldReturnSum_WhenTwoNumbers()\n {\n // Arrange\n var calculator = new Calculator();\n \n // Act\n var result = calculator.Add(3, 5);\n \n // Assert\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\nObserva la estructura Arrange-Act-Assert (AAA). Este es el estándar de oro para escribir pruebas: primero prepara los datos, luego ejecuta la acción y finalmente verifica el resultado. Recuerda este patrón: te salvará del caos.