Enjoy A New Student Discount All 55,000 Courses on sale for Only $12.99

Ends in 05h 23m 49s

Un test Junit5 con @DataJpaTest en SpringBoot

La anotación @DataJpaTest tiene un comportamiento muy curioso e interesante, ya que nos permite probar el acceso a datos, protegiendo la base de datos haciendo un Rollback al final de cata test, por lo que es muy útil al probar los servicios en una aplicacion Spring Boot

En este articulo, vamos a realizar el test de la clase PeliculaService que montamos en el articulo/video anterior

Para facilitar los ejemplos, hemos decidido trabajar, pàra test, con una base de datos H2 en memoria y cargar 3 registros en el proceso de arranque, con el fichero (data.sql)

y ya iremos creando o borrando registros, segun nos interese, pero sabiendo que en el test siguiente, ese efecto habrá desaparecido y solo existirán estos tres registro que creamos al arranque…y sin modificar

Con eso, ya conseguimos disponer de una de las características que todo test ha de cumplir, que se puedan pasar las pruebas en cualquier orden y que no dependa una de otra.

A partir de eso, ya podemos empezar a escribir el test

Necesito que Spring me inserte el repositorio y el servicio, ya que para crear el servicio, necesito el repositorio, y creo asi mismo un paar de objetos «Pelicula» para ir utilizando en el test

Para el test de insert:

inserto una de las peliculas creadas, y a continuacion,leo la pelicula con el id facilitado por la base de datos, y compruebo que los datos leídos son los mismos que tenia el objeto que grabé

Para el test de Update

Grabamos la película, le modificamos el título, y actualizamos la película, luego solo resta leerla y comparar que tiene el título modificado

El update con error es más sencillo

Solo es necesario que intentemos actualizar un registro que no existe….

La prueba del patch es semejante, lo unico que debemos modificar un solo campo

Y eso hacemos. Insertamos una película y enviamos el patch con el título cambiado y el identificador a 0, luego deberemos comprobar que el registro leido tiene cambiado el título, pero no el identificador.

Ahora debemos probar las funciones de borrar utilizando un objeto Película,

Para el borrado correcto, insertamos una película, a continuación la borramos, esperando que devuelva true, y, por ultimo comprobamos que ya no existe, y, para el borrado erroneo, montamos un objeto Pelicula que sabemos no existe, y lo intentamos borrar, esperando recibir un DaoException…..

La prueba de borrar por Id, repetimos la jugada, pero esta vez trabajando solo con los id

Aquí, no nos molestamos en insertar, porque sabemos que durante la carga, se crearon los registros 20, 21 y 22, por lo que podemos dar la orden de borrado del 20, y comprobar que luego no existe, o intentar borrar el 9999 que no existe para recibir el DaoException

La prueba de ListarTodos, la podemos hacer contando los registros leídos

Sabemos que solo hay 3 porque en el fichero data.sql solo hemos escritos tres insert, facil,¿no?

El listarTodos con error, es un poco mas dificil, ya que la condición es que no haya registros, pues los borraremos.

Tenemos comentadas las líneas para hacerlo manualmente, ya que JpaRepository me ofrece el método deleteAll que borra todo el contenido de golpe, perfecto, luego solo es necesario hacer la lectura, y comprobar que no recibo nada, aunque si tengo un List…

En la siguiente prueba, comprobamos el leerUno

Para el correcto, podemos insertar uno, que es la solucion utilizada, o comprobar la lectura de los tres que existen ya en la tabla, y para el error, solo leer un id que sabemos no existe….

Para el ultimo caso, he simplificado al máximo

Elemental, verdad?

En mi caso, me prepare una pequeña rutina para revisar algun caso extraño, que lista todos los registros existentes. Debemos recordar que al trabajar con DataJpaTest, en cada test, SIEMPRE tengo los tres registros originales…

Y con esto, comprobamos la corrección de nuestro servicio de peliculas (PeliculaService), por lo que despues, cuando escribamos el controlador, nos podremos despreocupar de todo esto

Conclusión

Todo este desarrollo lo tendreis explicado con mas detalle en youTube, a partir de fin de mayo, y, aunque es conveniente que intentéis escribirlo TODO vosotros, si queréis renunciar a ello, lo teneis tambien en GitHub

Este desarrollo esta hecho para disponer de un fuente para explicar otros temas, tal y como se indica en Visión de conjunto con Spring

Deja un comentario

/*Si te ha gustado el artículo
no dudes en compartirlo*/

Facebook
Twitter
LinkedIn

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies

Ver mi IP

Ver ip de mi máquina
tipo valor
Ip: 3.237.15.145
Proxy: 3.237.15.145
Remote host: ec2-3-237-15-145.compute-1.amazonaws.com
Remote port: 38854
** 3.237.15.145, 172.70.175.77