Estructura de pruebas unitarias con Given, When, Then en Kotlin

Clase 4 de 16Curso de Android Testing

Resumen

Crear pruebas unitarias efectivas es clave para mantener aplicaciones robustas y confiables. Una prueba unitaria claramente definida consta de tres elementos esenciales: condiciones iniciales, ejecuciones de acciones y resultados esperados, los cuales pueden validarse fácilmente utilizando una librería como Truth. A continuación, revisaremos cómo implementar estos conceptos en una clase sencilla llamada Experience Calculator, que asigna puntos según la ubicación proporcionada en Kotlin.

¿En qué consisten las pruebas unitarias?

Para crear pruebas unitarias efectivas, estas se dividen en tres partes fundamentales:

  • Condición (Given)
  • Acción (When)
  • Resultado esperado (Then)

El objetivo es comprobar que, dado un estado inicial específico, al ejecutar cierta acción, se obtiene un resultado esperado y verificable.

¿Cómo se realiza una prueba con Experience Calculator?

La clase Experience Calculator tiene como propósito calcular el puntaje según categorías específicas de lugares. Estos puntajes son así:

  • Lugar turístico: 5 puntos.
  • Lugar cultural: 4 puntos.
  • Parque o área natural: 3 puntos.
  • Vecindario local: 2 puntos.
  • Otro tipo de lugar: 1 punto.

Por ejemplo, si se determina que el lugar es turístico según rangos de coordenadas establecidos, la calculadora retorna 5 puntos.

¿Cómo utilizar Truth para verificar resultados?

Truth es utilizado por su legibilidad y facilidad para realizar aserciones sobre los resultados esperados. Por ejemplo, para verificar que al calcular con un lugar turístico se devuelve el puntaje correcto, se hace:

assertThat(result).isEqualTo(5)

Esta línea comprueba que el resultado obtenido del método corresponde exactamente al puntaje esperado, permitiendo validar rápidamente si la prueba pasa o falla.

¿Cuál es la estructura recomendada para nombrar las pruebas?

Para claridad y consistencia, nombra cada prueba siguiendo el esquema:

  • Given: la condición.
  • When: la acción ejecutada.
  • Then: el resultado que debería suceder.

Por ejemplo:

givenTouristSpot_whenCalculatorExperience_returnFivePoints()

Implementar esta notación facilita comprender rápidamente el propósito de cada prueba creada.

¿Cómo se ejecutan las pruebas y se interpretan los resultados?

Las pruebas pueden ejecutarse individualmente haciendo clic en la flecha junto al nombre de la prueba o ejecutar toda una clase para validar más casos al mismo tiempo.

  • Una prueba exitosa confirma que el resultado esperado coincide con lo obtenido.
  • Un fallo indica que hay discrepancia; esperar un 5 y recibir un 1 señalaría un error potencial en la lógica o entradas del código.

Si falla tras modificar tu código, corregir este problema garantiza que las modificaciones futuras no afecten funcionalidades anteriormente validadas.

¿Cómo practicar y mejorar tus habilidades en testing?

Te recomiendo intentar replicar los siguientes escenarios simples que fortalecerán tu habilidad:

  1. Calcular un resultado cero al no pasar ninguna localización.
  2. Evaluar el resultado con múltiples ubicaciones.
  3. Validar el puntaje devuelto para un lugar catalogado como cultural (cuatro puntos).

Estas prácticas son ejercicios esenciales en tus habilidades de desarrollo y testing en Kotlin.