Buenas prácticas y asserts en xUnit

Resumen

Escribir pruebas unitarias claras no depende solo de la herramienta, sino de cómo organizas el código dentro de cada test. Aquí aprenderás a aplicar la estructura triple A en xUnit y a usar distintos tipos de asserts para cubrir más escenarios en tu proyecto de String Manipulation.

¿Qué es la estructura triple A en pruebas unitarias?

La estructura triple A organiza el código interno de cada prueba en tres bloques: arrange, act y assert. Es una convención que hace tus tests legibles y mantenibles para cualquier otro desarrollador del equipo.

  • Arrange: configuras los datos iniciales, variables y objetos necesarios para ejecutar la prueba.
  • Act: ejecutas la función que quieres probar y guardas el resultado en una variable.
  • Assert: compruebas que el resultado coincide con el valor esperado.

La idea es probar una sola función a la vez, así que basta con una variable para guardar el resultado antes de comprobarlo [01:00].

¿Por qué se llama triple A? Porque las tres fases empiezan con A: arrange (preparar), act (actuar) y assert (verificar). Es el orden lógico que sigue cualquier prueba bien escrita.

¿Qué son los principios FIRST de testing?

Los principios FIRST son un conjunto de reglas que aplican cuando un proyecto de pruebas crece y necesita estructura para no convertirse en código espagueti inmantenible [01:45]. No los profundizamos aquí porque es contenido básico, pero conviene que los conozcas: tanto la triple A como FIRST son preguntas frecuentes en entrevistas técnicas.

¿Cómo aplicar triple A en una prueba de xUnit?

Volvamos a la prueba de concatenación de strings. Identificamos cada bloque de la triple A en el código:

  1. Arrange: instanciamos el objeto StringOperations que contiene la función a probar.
  2. Act: ejecutamos ConcatenateStrings y guardamos el resultado en una variable result.
  3. Assert: comparamos con Assert.Equal que result sea igual a "Hello, Platzi".

¿Cómo cubrir más escenarios con varios asserts?

Una buena práctica es comprobar distintos resultados posibles dentro de la misma prueba. Si solo validas la igualdad y la prueba falla, no sabes si el problema es un valor nulo, vacío o un string distinto.

xUnit ofrece muchas comprobaciones. Si escribes Assert. en Visual Studio, el autocompletado te muestra todas las opciones [04:30]. Las más útiles para empezar son:

  • Assert.NotNull(result): valida que el valor no sea nulo.
  • Assert.NotEmpty(result): valida que no sea una cadena vacía.
  • Assert.Equal("Hello, Platzi", result): valida la igualdad exacta.

Con estas tres líneas cubres tres escenarios distintos. Si la prueba falla, sabes exactamente dónde está el problema sin tener que adivinar.

¿Cómo probar funciones que devuelven true o false?

Cuando una función devuelve un booleano, debes probar los dos escenarios: cuando retorna true y cuando retorna false. Es una de las prácticas más importantes del testing [06:30].

Usemos la función IsPalindrome como ejemplo. Aplicamos la triple A:

csharp [Fact] public void IsPalindrome_True() { // Arrange StringOperations strOperation = new StringOperations(); // Act var result = strOperation.IsPalindrome("ama"); // Assert Assert.True(result); }

La palabra ama se lee igual de izquierda a derecha que de derecha a izquierda, así que la función debe devolver true. Para el escenario contrario, duplicamos la prueba pero pasamos "hello" y usamos Assert.False(result).

¿Cómo nombro las pruebas con varios escenarios? Usa el nombre de la función seguido de guion bajo y el escenario: IsPalindrome_True e IsPalindrome_False. Así quien lea el test sabe de inmediato qué caso valida.

¿Qué pasa si fuerzo un fallo en la prueba?

Puedes cambiar Assert.True por Assert.False, o modificar la lógica de IsPalindrome para confirmar que tus pruebas realmente detectan errores. Si la prueba se quiebra cuando debe quebrarse, está cumpliendo su trabajo.

¿Cómo ejecutar pruebas xUnit desde la terminal?

Además del Test Explorer de Visual Studio, puedes correr tus pruebas desde la terminal con un solo comando [10:15]. Abre la terminal en View y ejecuta:

bash dotnet test

Este comando recorre toda la solución, detecta cualquier proyecto de pruebas y las ejecuta en bloque. En el ejemplo se ejecutaron cuatro pruebas: una demo que trae la librería y las tres que creamos manualmente, todas pasando correctamente.

Ejecutar desde la terminal es útil cuando quieres integrar las pruebas en pipelines de CI/CD o automatizar validaciones fuera del IDE.

¿Cómo practicar lo aprendido con RemoveWhitespace?

El reto es escribir pruebas para la función RemoveWhitespace, que elimina los espacios en blanco de un string. Aplica todo lo visto:

  • Estructura triple A en cada prueba.
  • Asserts combinados como NotNull, NotEmpty y Equal.
  • Nombres descriptivos con escenarios separados por guion bajo.

¿Qué asserts combinaste tú para cubrir más escenarios en RemoveWhitespace? Cuéntalo en los comentarios y comparte tu enfoque con el resto de estudiantes.