Hace poco me encontré con un problema bastante común al trabajar con proyectos en Spring Boot y SonarCloud: la cobertura de pruebas no se estaba reportando correctamente. Aunque las pruebas se ejecutaban sin errores, en SonarCloud la cobertura aparecía como si fuera 0%. 🤯
Después de investigar y probar diferentes configuraciones, logré que todo funcionara. Aquí te comparto lo que hice, por si te sirve.
1. Agregar la dependencia de mockito-inline
Uno de los problemas que tuve al usar Mockito fue con clases finales o métodos estáticos. Para solucionarlo, agregué esta dependencia en el archivo pom.xml
:
org.mockito
mockito-inline
5.2.0
test
2. Configurar Jacoco correctamente
El plugin de Jacoco debe estar bien configurado para generar el archivo jacoco.xml
, que es el que SonarCloud usa para calcular la cobertura. Esta fue la configuración que usé en el pom.xml
:
org.jacoco
jacoco-maven-plugin
0.8.8
prepare-agent
prepare-agent
${project.build.directory}/jacoco.exec
surefireArgLine
report
test
report
XML
También fue necesario configurar el plugin de Surefire para que reciba los argumentos necesarios:
org.apache.maven.plugins
maven-surefire-plugin
@{surefireArgLine} -Xshare:off
3. Configurar SonarCloud
Para que SonarCloud encuentre el archivo generado por Jacoco, es necesario agregar la siguiente ruta en su configuración:
sonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml
Puedes hacer esto de dos formas:
- En el archivo
sonar-project.properties
(si lo estás usando). - O directamente en la configuración del proyecto en la web de SonarCloud:
- Ve a tu proyecto en SonarCloud.
- Abre
Administration > General Settings > JaCoCo
. - En el campo "Path to XML report", coloca:
target/site/jacoco/jacoco.xml
✅ Resultado
Después de aplicar estas configuraciones y ejecutar:
mvn clean verify
El reporte de cobertura fue generado correctamente y SonarCloud empezó a reconocer la cobertura real de las pruebas. 🎉
📝 Conclusión
No siempre es obvio cómo conectar bien Jacoco con SonarCloud en un proyecto Spring Boot, especialmente si estás empezando. Espero que este post te haya ayudado a evitar horas de prueba y error.