java - source - ¿Cómo hacer que Sonar ignore algunas clases para la métrica codeCoverage?
sonar.coverage.exclusions gradle (5)
A veces, Clover está configurado para proporcionar informes de cobertura de código para todos los códigos que no son de prueba. Si desea anular estas preferencias, puede usar elementos de configuración para excluir e incluir los archivos de origen de la instrumentación:
<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>maven-clover2-plugin</artifactId>
<version>${clover-version}</version>
<configuration>
<excludes>
<exclude>**/*Dull.java</exclude>
</excludes>
</configuration>
</plugin>
Además, puedes incluir la siguiente configuración de Sonar:
<properties>
<sonar.exclusions>
**/domain/*.java,
**/transfer/*.java
</sonar.exclusions>
</properties>
Tengo un perfil de Sonar en Maven. Todo funciona bien, excepto la métrica de cobertura de código. Quiero hacer que Sonar ignore algunas clases solo para la métrica de cobertura de código. Tengo el siguiente perfil:
<profile>
<id>sonar</id>
<properties>
<sonar.exclusions>**/beans/jaxb/**</sonar.exclusions>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.plugin.version}</version>
<configuration>
<redirectTestOutputToFile>true</redirectTestOutputToFile>
<excludes>
<exclude>**/*Suite*.java</exclude>
<exclude>**/*RemoteTest.java</exclude>
<exclude>**/*SpringTest.java</exclude>
<exclude>**/*CamelTest.java</exclude>
<exclude>**/*FunctionalTest.java</exclude>
<exclude>**/*IntegrationTest.java</exclude>
<exclude>**/*DaoBeanTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
Por favor ayuda. Intenté agregar algo como
<exclude>com/qwerty/dw/publisher/Main.class</exclude>
pero no ayudó
ACTUALIZAR
Tengo un correcto perfil de Cobertura. Intenté agregarlo al perfil de Sonar, pero aún tengo un 53% en lugar de un 95% como en el perfil de Cobertura.
<profile>
<id>sonar</id>
<properties>
<sonar.exclusions>**/beans/jaxb/**</sonar.exclusions>
<sonar.core.codeCoveragePlugin>cobertura</sonar.core.codeCoveragePlugin>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.plugin.version}</version>
<configuration>
<redirectTestOutputToFile>true</redirectTestOutputToFile>
<excludes>
<exclude>**/*Suite*.java</exclude>
<exclude>**/*RemoteTest.java</exclude>
<exclude>**/*SpringTest.java</exclude>
<exclude>**/*CamelTest.java</exclude>
<exclude>**/*FunctionalTest.java</exclude>
<exclude>**/*IntegrationTest.java</exclude>
<exclude>**/*DaoBeanTest.java</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>${cobertura.maven.plugin.version}</version>
<configuration>
<instrumentation>
<excludes>
<exclude>com/qwerty/dw/dao/*</exclude>
<exclude>com/qwerty/dw/domain/*</exclude>
<exclude>com/qwerty/dw/beans/**/*</exclude>
<exclude>com/qwerty/dw/daemon/exception/*</exclude>
<exclude>com/qwerty/dw/daemon/Main.class</exclude>
<exclude>com/qwerty/dw/sink/Main.class</exclude>
<exclude>com/qwerty/dw/publisher/Main.class</exclude>
<exclude>com/qwerty/dw/publisher/dao/*</exclude>
<exclude>com/qwerty/dw/publisher/domain/*</exclude>
</excludes>
</instrumentation>
<formats>
<format>html</format>
</formats>
<aggregate>true</aggregate>
<check>
<haltOnFailure>true</haltOnFailure>
<branchRate>60</branchRate>
<lineRate>60</lineRate>
<totalBranchRate>60</totalBranchRate>
<totalLineRate>60</totalLineRate>
</check>
</configuration>
<executions>
<execution>
<goals>
<goal>clean</goal>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
Creo que está buscando la solución descrita en esta respuesta. Excluya los métodos de cobertura de código con Cobertura. Tenga en cuenta que si está utilizando Sonar 3.2, debe especificar que su herramienta de cobertura es cobertura y no jacoco (predeterminado), que no lo hace. t soporta este tipo de característica todavía
En el momento de escribir este documento (que está con SonarQube 4.5.1), la propiedad correcta para establecer es sonar.coverage.exclusions
, por ejemplo:
<properties>
<sonar.coverage.exclusions>foo/**/*,**/bar/*</sonar.coverage.exclusions>
</properties>
Esto parece ser un cambio de unas pocas versiones anteriores. Tenga en cuenta que esto excluye las clases dadas del cálculo de cobertura solamente. Todas las demás métricas y problemas se calculan.
Para encontrar el nombre de la propiedad de su versión de SonarQube, puede intentar ir a la sección Configuración general de su instancia de SonarQube y buscar el elemento de cobertura de código (en SonarQube 4.5.x, eso es Configuración general → Exclusiones → Cobertura de código ). Debajo del campo de entrada, da el nombre de propiedad mencionado anteriormente ("Clave: sonar.coverage.exclusions").
Para jacoco: usa estas propiedades:
-Dsonar.jacoco.excludes=**/*View.java
Para nosotros esto funcionó (básicamente propiedades de nivel pom.xml):
<properties>
<sonar.exclusions>**/Name*.java</sonar.exclusions>
</properties>
De acuerdo con http://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus#NarrowingtheFocus-Patterns , puede terminar con ".java" o posiblemente "*" para obtener las clases de java que está interesado en.