Pruebas de la Persistencia
El propósito de las pruebas de persistencia es probar, de manera aislada sin pasar por las otras capas de la aplicación, una clase de persistencia. De acuerdo con nuestras convenciones de nombre una clase XYZPersistence
.
Para lograr esto, utilizamos un framework llamado Arquillian
que nos facilita:
- Crear un empaquetado (en este caso un
jar
) con solo las clases que vamos a probar. - Desplegar ese empaquetado en un contenedor embebido (
glassfish embebido
). Embebido significa que al lanzar la pruebaArquillian
se ocupa de ejecutar un "pequeño" glassfish donde se va a desplegar el empaquetado que queremos. - Una vez que se termine la ejecución de todas las pruebas
Arquillian
se ocupa de apagar el glassfish que había iniciado. - El contenedor embebido que maneja
Arquillian
tiene también una base de datosDerby
solo para las pruebas que no interfiere con nuestra base de datos del proyecto.
Las pruebas de persistencia propiamente dichas son programadas utilizando Junit. Es decir habrá un método de prueba por cada método en la clase XYZPersistence
.
La estrategia general para cada método de la clase de persistencia consiste en: 1) crear datos aleatorios, 2) invocar los métodos que se van a probar y 3) verificar si en la base de datos efectivamente se hicieron los cambios utilizando un
entity manager
independiente de los métodos que se están probando.
Más específicamente los pasos son los siguientes:
- Se crea el archivo que se va a desplegar con las clases
Entity
y la clasePersistence
que se requiera para la prueba. - Antes de cada método prueba se borra la base de datos
- Se crean entidades con datos aleatorios de las entidades que se van a probar utilizando
PODAM
- Se insertan los datos creados con
PODAM
utilizando unentity manager
dentro de una transacción definida explícitamente. - Por cada método:
- Se construye datos adicionales si se requiere
- Se invoca el método que se va a probar
- Se utiliza un
entity manager
, para verificar los cambios en la base de datos. - Se comparan los resultados utilizando los
assert
de junit.