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 pruebaArquillianse 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
Arquillianse ocupa de apagar el glassfish que había iniciado. - El contenedor embebido que maneja
Arquilliantiene también una base de datosDerbysolo 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 managerindependiente 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
Entityy la clasePersistenceque 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
PODAMutilizando unentity managerdentro 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
assertde junit.