Skip to main content

Command Palette

Search for a command to run...

Pruebas unitarias en Quarkus generadas con Diffblue (Parte II)

Updated
3 min read
Pruebas unitarias en Quarkus generadas con Diffblue (Parte  II)
C

I am Christian Loza Peralta, working as a technical leader specialized in software engineering and software architecture. My expertise lies in the development of scalable and secure applications, utilizing agile methodologies, as well as in the implementation of cloud-based solutions and the adoption of microservices architectures. Furthermore, my interest in philosophy and anthropology shapes my holistic approach to designing solutions that are not only technically robust but also contribute to technological culture. With a constant commitment to learning and improvement, I aim to tackle projects from a comprehensive perspective that combines technical and cultural effectiveness

Si quieres ver la parte I puedes, ingresa al siguiente link (AQUI)

Iniciando pruebas

Para realizar algunas pruebas se implementó unas simples clases de cálculo de distancias, y que posteriormente estas son expuestas por endpoints, se puede visualizar en un swagger para realizar pruebas.

Creación de pruebas con Diffblue

Actualmente al generar el .JAR no tiene ninguna prueba, se tiene incluido JaCoCo para realizar una cobertura correspondiente

Si revisan en el IDE al seleccionar la clase verán un ícono de probeta, el cual indica que esta listo para generar pruebas con respecto a esa clase

Procedemos a generar las pruebas haciendo clic en la clase o método que queramos o directamente en el paquete con clic derecho sobre él y luego presionar la opción de Write Test .

Luego de un momento generará las pruebas correspondientes que puede visualizarse en un tab.

Luego de generar las pruebas unitarias existen un bloque de ellas donde se desahabilitaron debido a un error (ver imagen), esto debido a que detecta las anotaciones JAX-RS como nulas, para ello es necesario agregar la inyección directamente

Pruebas unitarias generadas

Resultados

Resultados en base a cobertura de código

Existe un problema con respecto a la implementación de excepciones, por ejemplo en las tres clases existen métodos los cuales llaman excepciones, y no fueron implementados correctamente.

Los resultado con JaCoCo demuestran que algunos puntos no fueron cubiertas con las pruebas generadas llegando a un 97%.

Mientras que haciendo una prueba de cobertura muestra que tiene un 95% de cobertura de código.

Recordemos que en este caso se esta utilizando Quarkus y Diffblue tiene mayor decisión para generar pruebas con Mockito y que tiene una mayor generación si utilizamos Spring (Aunque Quarkus puede utilizar sus anotaciones).

Una dependencia encontrada para generar las pruebas fue mockito como base principal para la generación de pruebas.

Resultados en base a calidad de código

Se utilizó sonarCloud para verificar si tenemos algún Issue con respecto a las pruebas unitarias, pero no hubo mayor incidente debido a la complejidad de los métodos.

Recursos utilizados

  1. https://github.com/ChristianLoza/quarkus-diffblue

  2. https://sonarcloud.io/project/overview?id=ChristianLoza_quarkus-diffblue (Por configurar Rules y QualityGates)

  3. https://www.diffblue.com/

  4. https://quarkus.io/

Conclusiones

  1. Pierde un poco el enfoque si es que se busca un desarrollo dirigo en base a TDD

  2. En caso de utilizar otro tipo de pruebas como (REST-assured) Diffblue no genera este tipo de pruebas

  3. Reduce tiempo en cuanto a generación de pruebas, si bien en caso de utilizar otro framework requiere realizar algunas modificaciones.

  4. Con respecto al uso de Quarkus es necesario siempre agregar la anotación @QuarkusTest en cada clase de prueba creada.

  5. es 100% compatible con Spring Framework, Mockito y JUnit 4 o 5.

More from this blog

C

Christian Loza Peralta

13 posts

I’m Christian Loza, passionate about software engineering and emerging technologies, focusing on software and solution architecture, and cloud, to build scalable and efficient systems.