Configuración de xUnit/MSTest y aserciones
Aprenda la estructura de una prueba (Arrange-Act-Assert), descubra cómo las aserciones hacen fallar las pruebas y relacione estas ideas con los atributos de MSTest/xUnit.
Configuración de xUnit/MSTest y aserciones es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 1 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 3 lecciones en total.
¿Qué es una prueba unitaria?
Objetivo: Escribir pruebas unitarias pequeñas y repetibles.
- Un proyecto de pruebas independiente usa MSTest o xUnit
- Cada prueba comprueba un comportamiento
- Use nombres claros y aserciones
Patrón AAA
Las pruebas siguen Arrange → Act → Assert. Aquí se simula una aserción con una comprobación sencilla.
using System;
public static class MathUtil
{
// Method under test
public static int Add(int a, int b)
{
return a + b;
}
}
public class Program
{
public static void Main(string[] args)
{
// Arrange
int a = 2;
int b = 3;
int expected = 5;
// Act
int actual = MathUtil.Add(a, b);
// Assert (manual check for this console demo)
if (actual == expected)
Console.WriteLine("PASS: Add returned " + actual);
else
Console.WriteLine("FAIL: expected " + expected + " but got " + actual);
}
}
Comportamiento de las aserciones
Una aserción produce una excepción cuando no hay coincidencia. Los frameworks reales funcionan de forma similar (ofrecen una API más completa e informes más detallados).
using System;
public static class Assert
{
public static void AreEqual(int expected, int actual)
{
if (expected != actual)
throw new Exception("AreEqual failed: expected " + expected + ", actual " + actual);
}
public static void IsTrue(bool condition, string message)
{
if (!condition) throw new Exception("IsTrue failed: " + message);
}
}
public static class MathUtil
{
public static int Mul(int a, int b) { return a * b; }
}
public class Program
{
public static void Main(string[] args)
{
try
{
int r = MathUtil.Mul(2, 4);
Assert.AreEqual(8, r); // pass
Assert.IsTrue(r % 2 == 0, "even"); // pass
Console.WriteLine("All assertions passed.");
}
catch (Exception ex)
{
Console.WriteLine("TEST FAILED: " + ex.Message);
}
}
}
Ejemplo de pruebas correctas
Cada prueba comprueba un comportamiento. En MSTest/xUnit real, un Assert que falla marca la prueba en rojo.
using System;
public static class StringUtil
{
public static string Repeat(string s, int n)
{
if (n < 0) throw new ArgumentOutOfRangeException("n");
string r = "";
for (int i = 0; i < n; i++) r += s;
return r;
}
}
public static class Assert
{
public static void AreEqual(string expected, string actual)
{
if (expected != actual)
throw new Exception("AreEqual failed: expected [" + expected + "], actual [" + actual + "]");
}
}
public class Program
{
static void TestRepeat_Happy()
{
string got = StringUtil.Repeat("ab", 3);
Assert.AreEqual("ababab", got); // pass
}
static void TestRepeat_EmptyTimesZero()
{
string got = StringUtil.Repeat("x", 0);
Assert.AreEqual("", got); // pass
}
public static void Main(string[] args)
{
try { TestRepeat_Happy(); Console.WriteLine("PASS: Happy"); } catch (Exception ex) { Console.WriteLine("FAIL: Happy -> " + ex.Message); }
try { TestRepeat_EmptyTimesZero(); Console.WriteLine("PASS: Zero"); } catch (Exception ex) { Console.WriteLine("FAIL: Zero -> " + ex.Message); }
}
}
Correspondencia entre MSTest y xUnit
Aspectos básicos de MSTest:
- [TestClass] en la clase
- [TestMethod] en cada prueba
- Assert.AreEqual/IsTrue/AreNotEqual…
Aspectos básicos de xUnit:
- [Fact] para un método de prueba
- Assert.Equal/True/False…
- No se necesita ningún atributo para la clase de pruebas
Consejos sobre nombres y alcance
Consejos:
- Asigne nombres a las pruebas siguiendo el formato Method_Scenario_ExpectedResult
- Una sola aserción o un solo comportamiento por prueba
- Mantenga las pruebas pequeñas e independientes
Las aserciones provocan fallos
Resumen
Resumen: Use el patrón AAA, compare el resultado esperado con el real mediante aserciones y aplíquelo en MSTest ([TestMethod]) o xUnit ([Fact]).
Preguntas frecuentes
¿La lección «Configuración de xUnit/MSTest y aserciones» es gratis?
Sí — el texto completo de «Configuración de xUnit/MSTest y aserciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 3 lecciones en total.
¿Qué aprenderé en «Configuración de xUnit/MSTest y aserciones»?
Aprenda la estructura de una prueba (Arrange-Act-Assert), descubra cómo las aserciones hacen fallar las pruebas y relacione estas ideas con los atributos de MSTest/xUnit. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C# Academy?
No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 3.
¿Cuánto tiempo toma la lección «Configuración de xUnit/MSTest y aserciones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C# Academy?
Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Configuración de xUnit/MSTest y aserciones
- Fakes mediante interfaces y builders de datos de prueba
- Depuración de pruebas fallidas