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

Ends in 05h 23m 49s

Desarrollo de un CRUD con SpringBoot. Test de las validaciones – Optimización

En el artículo anterior, estuvimos viendo cómo establecer un test de la clase de validación que escribimos. Con lo explicado, no hay duda que podemos realizar las pruebas necesarias, pero, cuando el proyecto es grande, o, somos suficientemente responsables como para escribir una casuística de test larga, hay formas mas agradables de escribir esos test

En este articulo, veremos algunas formas de mejorar la claridad de nuestros test. utilizando los test parametrizados y, entregando valores desde array, listas, ficheros y métodos

Los ParameterizedTest

Hasta ahora, hemos visto como hacer múltiples pruebas en una rutina, y, aunque hemos conseguido que corriesen todas, aunque alguna diera error, también es cierto que, descubrir cual era la que fallaba era un poco «delicado».

Me acuerdo también, de haber comentado que la mejor forma de encarar varios test, es escribir un método para cada uno de ellos, aunque esa metodología hace que nuestros test pueda ser inmenso.

La solucion esta en utilizar la anotación de @ParameterizedTest, y luego indicar los distintos valores sobre el que queremos realizar el test.

Tambien tenemos alguna anotación para reducir el numero de lineas a escribir

  • @NullSource – Nos envia a la entrada el valor nulo
  • @EmptySource – Nos envia a entrada una cadena vacia
  • @NullAndEmptySource – Nos envía a la entrada una cadena nula, y despues una vacía
  • @ValueSource – Nos envía a la entrada el valor que indiquemos a continuación. Si sigue un array, el test se llama cuantas veces haga falta, indicando en cada caso un valor

Sabiendo esto, nuestro primer test, en esta ocasion quedaria como

En este caso, el test puede que tenga mas lineas, parte debido a un tratamiento obligatorio para el caso «null», y otro porque tengo que separar los test por positivo y por negativo, y esto ultimo, lo voy a tener que hacer casi siempre….

En el caso anterior, añadí los valores en la rutina; pero sabéis que me gusta centralizar las constantes al principio del modulo, por lo que tambien puedo combinar esas constantes con los nuevos sistemas; por ejemplo, puedo hacer

Naturalmente, siempre que arriba haya definido las constantes como

Utilización de @CsvSource

Estas soluciones, estan muy bien cuando solo requerimos un parametro para realizar el test, pero , en ocasiones, necesitamos mas de uno, por ejemplo, en los casos de nuevoSiNoVacio, necesitamos el valor actual del campo, el valor que queremos colocar, y, el resultado que debe devolver

Si no voy a parametrizar, la solucion puede ser

Pero si queremos parametrizarlo, debemos pasar al metodo los tres valores, que en ese ejemplo he construido dentro.

En este caso, si vamos a realizar varias pruebas, podemos parametrizarlo, y facilitar los datos por medio de un @CsvSource, o, incluso, leerlos de un fichero, indicandolo con @CsvFileSource

La unica limitacion que tiene, es que no puedo utilizar constantes definidas en cabecera, y tengo que indicarle los parametros aqui mismo; por ejemplo:

En el ejemplo, hago la prueba tambien con NULL, ya que recibo Long, si fuera con primitivos, no podria haber realizado la prueba de null

Trabajando con @MethodSource

Como caso final a esta introducción, os presento otra forma de parametrizar los test, y, es facilitando los datos desde un método.

Quizás, la idea no sea muy intuitiva, pero puede llegar a ser muy util. En nuestro ejemplo, lo he utilizado para el test de comparar fecha, ya que necesito inyectar LocalDate al método, y no es demasiado simple la conversión

Aqui teneis el ejemplo:

Conclusión

Este articulo es parte de  Visión de conjunto con Spring y continuación del inicio del test, y teneis un desarrollo con más detalle en youTube, y, aunque es conveniente que intentéis escribirlo TODO vosotros, si queréis renunciar a ello, lo teneis tambien en GitHub

La explicación en YouTube:

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: 44.200.86.95
Proxy: 44.200.86.95
Remote host: ec2-44-200-86-95.compute-1.amazonaws.com
Remote port: 49782
** 44.200.86.95, 172.70.38.85