JUnit
Es un framework de pruebas para Java, utilizado para escribir y ejecutar pruebas repetibles. Es una instancia de la arquitectura xUnit para frameworks de pruebas unitarias. Es de código abierto, creado por Kent Beck y Erich Gamma, inicialmente utilizado para eXtreme Programming.
Objetivos
- Ejecutar pruebas de manera automática
- Evitar el problema de tener que ejecutar pruebas una por una, de manera manual con posibilidad de errores.
- Crear pruebas que retienen su valor agregado a través del tiempo
- Capacidad de repetir una prueba bajo las mismas condiciones
- Si hago cambios sobre el software, lo demás debe mantenerse funcionando
- Provee una forma de hacer pruebas de regresión
- Se pueden agrupar conjuntos de pruebas de distintas personas sin problemas, debido al carácter uniforme que provee
- Crear pruebas para cada parte del software
- La idea es crear las pruebas al comienzo del desarrollo y no después
- Es como crear las pruebas a partir de las clases que no contienen implementación y a medida que se desarrolla software ir probando
- Un cambio significa ejecutar las pruebas anteriores y las nuevas
Características
JUnit es un framework relativamente sencillo que provee solamente la funcionalidad que requiere una persona para hacer pruebas. Se debe aprender poco para poder escribir una prueba.
Por cada clase hay una clase de pruebas que contiene al menos un método de prueba por cada método de la clase.
El método de prueba invoca lo que se va a probar y luego se utilizan aserciones para probar resultar esperados.
Hay distintas formas para compartir información entre las pruebas, por ejemplo los escenarios de las pruebas y también se pueden crear suites de pruebas para organizar y ejecutar pruebas fácilmente.
La ejecución en Junit de un conjunto de pruebas se hace de manera gráfica y textual. Si todos las pruebas pasan, el resultado en la ventana de ejecución será de color verde y si alguna falla será de color rojo.
Conceptos Básicos
Cada clase de prueba contiene métodos para probar los métodos de una clase particular.
Cada método de prueba debe tener la anotación @Test
. El siguiente diagrama muestra la clase BookLogicTest
que es la clase de pruebas de la clase BookLogic
. Hay un método de prueba por cada método de la clase BookLogic
. Estos métodos están anotados con @Test
En el ejemplo, el método createBookTest
debe invocar en algún momento al método createBook
qué es el método que se quiere probar. Normalmente, antes del llamado debe haber alguna preparación para el llamado , como por el ejemplo crear el objeto `dto
que pasa de argumento y después del llamado debe haber una serie de aserciones (asserts
) para verificar que el resultado del método es el esperado.
Es normal en las pruebas que la creación de escenarios iniciales sea común para todas las pruebas. Para lograr esta factorización y no repetir en cada prueba, existe la anotación @Before
que indica que los métodos anotados con con esta anotación se ejecutarán antes de cada prueba. De la misma forma existe la anotaciónn @After
que indica que los métodos anotados se ejecutarna después dela ejecución de cada uno de los métodos de prueba.
Los métodos anotados con @BeforeClass
y @AfterClass
se ejecutarán una sola vez antes de ejecutar cualquier prueba y después de ejecutar la última prueba, respectivamente. Es importante recordar que cada método de prueba se ejecuta de manera independiente, no se puede suponer un orden de ejecución y una dependenica entre los métodos de prueba.
El siguiente código ilustra el uso de las anotaciones @Before
y @Test