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:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>5.2.0</version>
<scope>test</scope>
</dependency>
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:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.8</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<destFile>${project.build.directory}/jacoco.exec</destFile>
<propertyName>surefireArgLine</propertyName>
</configuration>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<formats>
<format>XML</format>
</formats>
</configuration>
</execution>
</executions>
</plugin>
También fue necesario configurar el plugin de Surefire para que reciba los argumentos necesarios:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>@{surefireArgLine} -Xshare:off</argLine>
</configuration>
</plugin>
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.
Top comments (0)