Tests más legibles con AssertJ

0
4121

Este tutorial explica qué es AssertJ y por qué conviene usarlo en nuestras clases de prueba. ¡Manos a la obra!

Índice de contenidos

Introducción

AssertJ es un framework que proporciona métodos de prueba específicos, y los encadena de modo similar al lenguaje humano.

Este código se centra en qué queremos hacer, ocultando el cómo queremos hacerlo en la implementación de cada método. El resultado son pruebas más legibles, y recordemos que legibilidad es mantenibilidad, que es una de los tres motivos por los que escribimos pruebas.

¿Porqué probamos el código?

  • Verificar la especificación. También conocida como “lo que debería hacer el programa”, que puede expresarse como precondiciones, postcondiciones, y expectativas sobre el resultado obtenido.
  • Forzarnos a escribir una tarea por método. Si un método hace una sola cosa, su nombre es representativo de su contenido, lo que me ahorra leer su implementación.
  • Documentar el código que estamos probando. Una prueba de unidad ilustra una funcionalidad concreta (unitaria) del código que probamos. Leyendo los tests por tanto, podemos ver como usar el código probado.

Existen varios frameworks con características similares a AssertJ. Uno de ellos es Hamcrest que también hemos visto en Adictos.

¿Qué es AssertJ?

AssertJ es un proyecto de código abierto que ha surgido a partir del desaparecido Fest Assert. Es compatible con otras librerías como Guava, Joda Time y Neo4J. También, dispone de un generador automático de comprobaciones para los atributos de las clases, lo que añade más semántica a nuestras clases de prueba.

Podemos añadir AssertJ a nuestros proyectos usando Maven:

o Gradle:

Tras añadirlo al proyecto lo importamos así:

Este import estático da acceso a todos lo métodos de AssertJ.

Tipos de comprobaciones

A continuación muestro las comprobaciones más comúnes que incluye AssertJ. El propio código ilustra su funcionalidad, pero lo comento en español por si hay alguna duda.

Comprobaciones de números

Esta comprobaciones valen para datos de tipo numérico como int, double, o float.

Comprobaciones de cadenas

Comprobaciones para el tipo de dato String.

Comprobaciones de colecciones

Comprobaciones para colecciones de elementos.

Comprobaciones comunes

Comprobaciones para diversos tipos de datos.

Comprobaciones del modelo

Muchas veces queremos comprobar que un determinado objeto de nuestro modelo tiene una serie de valores en ciertos atributos. O, de otra forma, comprobar condiciones para cada objeto de modelo de forma específica. AssertJ nos hace que esa comprobación sea mucho más legible.

Para ello, vamos a partir de que tenemos la siguiente clase:

Podemos implementar una clase de comprobaciones de los atributos con AssertJ de la siguiente forma:

Con esto implementado, nuestro método de prueba quedaría de la siguiente forma:

Esto puede ser muy útil ya que podemos crear una clase propia para el modelo con las comprobaciones que se realizan en distintos métodos de prueba, evitando así la duplicidad de este código y facilitando su mantenimiento.

Conclusiones

AssertJ mejora la legibilidad y comprensión del código de prueba. En comparación con JUnit ahorra código y nos hace más productivos. Podemos también declarar nuestras condiciones personalizadas y aplicarlas en grupo sobre objetos o colecciones, lo que nos aporta mucho control sobre la comprobación que estamos realizando.

Es una buena opción emplear este tipo de frameworks porque mejoran la calidad de nuestro código.

Referencias

Documentación de AssertJ

Dejar respuesta

Please enter your comment!
Please enter your name here