web-dev-qa-db-fra.com

Comment faire en sorte que Sonar ignore certaines classes pour la métrique de couverture de code?

J'ai un profil Sonar dans Maven. Tout fonctionne bien sauf la métrique de couverture de code. Je souhaite que Sonar ignore certaines classes uniquement pour la métrique de couverture de code. J'ai le profil suivant:

<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>

S'il vous plaît aider. J'ai essayé d'ajouter quelque chose comme 

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

mais ça n'a pas aidé

METTRE &AGRAVE; JOUR

J'ai un profil Cobertura correct. J'ai essayé de l'ajouter au profil Sonar, mais j'ai toujours 53% au lieu d'environ 95% comme dans le profil 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>
29
Dmitrii Borovoi

Au moment de l'écriture (avec SonarQube 4.5.1), la propriété correcte à définir est sonar.coverage.exclusions, par exemple:

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

Cela semble être différent de quelques versions antérieures. Notez que cela exclut les classes données du calcul de la couverture uniquement. Tous les autres indicateurs et problèmes sont calculés.

Pour trouver le nom de la propriété correspondant à votre version de SonarQube, vous pouvez essayer de vous rendre dans la section Paramètres généraux de votre instance SonarQube et rechercher le Couverture de code item (dans SonarQube 4.5.x, c'est Paramètres généraux → Exclusions → Couverture de code ). Sous le champ de saisie, il indique le nom de la propriété mentionnée ci-dessus ("Key: sonar.coverage.exclusions").

49
Thomas Jensen

Pour nous, cela a fonctionné (essentiellement les propriétés de niveau pom.xml):

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

Selon http://docs.sonarqube.org/display/SONAR/Narrowing+the+Focus#NarrowingtheFocus-Patterns il semble que vous puissiez le terminer par ".Java" ou éventuellement "*" pour obtenir le code Java les classes qui vous intéressent.

21
rogerdpack

Pour jacoco: utilisez ces propriétés:

-Dsonar.jacoco.excludes=**/*View.Java
5
Khaouini

Parfois, Clover est configuré pour fournir des rapports de couverture de code pour tous les codes non testés. Si vous souhaitez remplacer ces préférences, vous pouvez utiliser des éléments de configuration pour exclure et inclure les fichiers source de l'instrument:

<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>

En outre, vous pouvez inclure la configuration Sonar suivante:

<properties>
    <sonar.exclusions>
        **/domain/*.Java,
        **/transfer/*.Java
    </sonar.exclusions>
</properties> 
2
Cutberto Ocampo

Je pense que vous recherchez la solution décrite dans cette réponse Exclure les méthodes de la couverture de code avec Cobertura N'oubliez pas que si vous utilisez Sonar 3.2, vous devez spécifier que votre outil de couverture est cobertura et non jacoco (par défaut), qui ne supporte pas encore ce genre de fonctionnalité

2
ppapapetrou

Lorsque vous utilisez sonar-scanner pour Swift, utilisez sonar.coverage.exclusions dans votre sonar-project.properties pour exclure tout fichier ne contenant que la couverture de code. Si vous souhaitez également exclure des fichiers de l'analyse, vous pouvez utiliser sonar.exclusions. Cela a fonctionné pour moi dans Swift

sonar.coverage.exclusions=**/*ViewController.Swift,**/*Cell.Swift,**/*View.Swift
1
Deepika