2012-08-27 31 views
16

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:¿Cómo hacer que Sonar ignore algunas clases de la métrica CodeCoverage?

<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. He intentado añadir algo así como

<exclude>com/qwerty/dw/publisher/Main.class</exclude> 

pero no ayudar a

ACTUALIZACIÓN

tengo un perfil Cobertura correcta. He intentado añadir al perfil del sonar, pero todavía tengo 53% en lugar alrededor del 95% como en el perfil 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> 
+0

¿Probablemente un problema sin resolver? http://jira.codehaus.org/browse/SONAR-766 – Jayan

Respuesta

1

creo que estés en busca de la solución descrita en esta respuesta Exclude methods from code coverage with Cobertura que tener en cuenta que si está utilizando Sonar 3.2, debe especificar que su herramienta de cobertura es cobertura y no jacoco (predeterminado), que no es compatible con este tipo de función aún

+0

Reformulo la pregunta.Cómo reutilizar informes generados por cobertura –

1

A veces, Clover está configurado para proporcionar informes de cobertura de código para todos código sin prueba. Si desea anular estas preferencias, es posible utilizar elementos de configuración para excluir e incluir archivos de origen de ser instrumentado:

<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, puede incluir la siguiente configuración Sonar:

<properties> 
    <sonar.exclusions> 
     **/domain/*.java, 
     **/transfer/*.java 
    </sonar.exclusions> 
</properties> 
11

Para nosotros esto trabajado (básicamente propiedades de nivel pom.xml):

 <properties> 
      <sonar.exclusions>**/Name*.java</sonar.exclusions> 
     </properties> 

Según http://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus#NarrowingtheFocus-Patterns se deduce que o bien puede terminar con ".java" o posiblemente " *" Para obtener las clases de Java que le interesa

+2

También estaba viendo esto, pero esto excluye los archivos de cada métrica (API documentada, cumplimiento de reglas, ...) y no solo prueba la cobertura. – g00glen00b

+0

Sí, eso es lo que queríamos en nuestro caso. Es posible que pueda agregarlo como, por ejemplo, pmd/findbugs o exclusiones de jacoco. [?] – rogerdpack

+1

Eso puede ser lo que quería, pero la pregunta era explícita sobre la cobertura: "Quiero hacer que Sonar ignore algunas clases ** solo ** para el la métrica de cobertura de código " – Lonzak

3

Para jacoco:. Usar estas propiedades:

-Dsonar.jacoco.excludes=**/*View.java 
+2

' sonar.jacoco.excludes' ya no es compatible (a partir de SonarQube 4.5.1). Ver [aquí] (http://stackoverflow.com/a/27133765/1005481) para la configuración "nueva". –

27

En el momento de escribir estas líneas (que es con sonarqube 4.5.1), la propiedad correcta para establecer sonar.coverage.exclusions es, por ejemplo:

<properties> 
    <sonar.coverage.exclusions>foo/**/*,**/bar/*</sonar.coverage.exclusions> 
</properties> 

Esto parece ser un cambio de unos pocos 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.

Con el fin de encontrar el nombre de la propiedad para su versión de sonarqube, puede intentar ir a la configuración general sección de la instancia sonarqube y buscar la cobertura de código elemento (en sonarqube 4.5.x, eso es Configuración general → Exclusiones → Cobertura de código). Debajo del campo de entrada, se muestra el nombre de propiedad mencionado anteriormente ("Clave: sonar.coverage.exclusions").

+0

Para gradle es sonarRunner { sonarProperties { propiedad "sonar.coverage.exclusions", "'**/domain/**', '**/facade/**', '**/stub/**' , '**/model/**', '**/config/**' " propiedad" sonar.exclusions "," **/stub/** " } } –

+0

@Thomas Pero parece que esto no no tenedor para pruebas de integración. –

+1

No puedo encontrar 'sonar.coverage.exclusions' en ninguna parte de los documentos, solo se menciona' sonar.exclusions'. –

Cuestiones relacionadas