¿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:
Veamos en detalle cada una de estas características.
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.
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.
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.
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.
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.
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.
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?