DEV Community

Juan Manuel Hoyos
Juan Manuel Hoyos

Posted on

Cobertura de pruebas en Spring Boot con Jacoco y SonarCloud: configuración paso a paso

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>
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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:
  1. Ve a tu proyecto en SonarCloud.
  2. Abre Administration > General Settings > JaCoCo.
  3. En el campo "Path to XML report", coloca:
   target/site/jacoco/jacoco.xml
Enter fullscreen mode Exit fullscreen mode

✅ Resultado

Después de aplicar estas configuraciones y ejecutar:

mvn clean verify
Enter fullscreen mode Exit fullscreen mode

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)