hombre-con-ideas.jpg¿Qué es una buena prueba unitaria? Siguendo unos pocos consejos claros y consisos podremos mejorar la calidad de nuestras pruebas, y crear software con mejores resultados.

Las características principales de una buena prueba unitaria:

  • Aislada e independiente
  • Repetible
  • Fácil de escribir
  • Rápida para ejecutar
  • Clara en su objetivo
  • Automatizada
  • Cumple con los mismos estándares que el código productivo
  • 100% correcta, siempre

Veamos en detalle cada una de estas características.

1. Aislada e Independiente

Las pruebas deben ser aisladas entre si, y no ser afectadas por la presencia, ausencia o resultado de otras ejecuciones. Una prueba tiene que ser independiente de otras pruebas, y debe poder funcionar sin importar otras corridas.

2. Repetible

Las pruebas tienen que ser repetibles en todo aspecto: debe ser posible ejecutar una prueba cualquier cantidad de veces, y obtener el mismo resultado de manera consistente.

3. Fácil de escribir

Se tienen que usar las librerías apropiadas para la situación bajo test, de manera de simplificar al máximo la construcción de la prueba. Una prueba dificil de constuir será dificil de mantener, por lo cual deben tomarse los recaudos necesarios para asegurar su simplicidad. El uso de herramientas de prueba como JUnit, EasyMock, Mockito y MockEJB nos ayudarán en la tarea.

Por otro lado, las pruebas son cortas, y usualmente cada una no debería tener más de una docene de líneas de código.

4. Rápida para ejecutar

Las pruebas unitarias tienen que ejecutarse de forma rápida y casi al instante, y es un requisito esencial al hacer un Desarrollo Guiado por Tests (TDD).

Esto ocurre porque las pruebas unitarias sólo testean una pequeña porción de código, en general una única rama de ejecución de un único método.

5. Clara en su objetivo

El código de la prueba debe ser claro y específico, dejando el claro su objetivo, y sirviendo además de ejemplo concreto para el uso del API.

6. Automatizada

Las pruebas tienen que automatizarse, usando herramientas como JUnit u otras, de manera de facilitar su ejecución y poder determinar de manera exacta el estado del código bajo prueba. Además, el uso de herramientas de automatización de pruebas permiten la integración continua.

7. Cumplir los mismos estándares que el código productivo

Las pruebas se codifican usando los mismos convenciones y estándares de calidad que el código productivo de la aplicación: cumplen con el mismo nivel de excelencia que adopta el equipo que desarrolla software.

8. 100% correcta, siempre

Y por último, el proyecto tiene que tener el 100% de sus prueba pasando correctamente, siempre.

Basado en What are the qualities of a good test?

Inspiración.

"Si tú tienes una manzana y yo tengo una manzana e intercambiamos las manzanas, entonces tanto tú como yo seguiremos teniendo una manzana cada uno. Pero si tú tienes una idea y yo tengo una idea, e intercambiamos las ideas, entonces ambos tendremos dos ideas"

Bernard Shaw