web-dev-qa-db-fra.com

Comment faire échouer une construction maven, si la couverture de JUnit tombe en dessous d'un certain seuil

Je reçois la mesure de pourcentage de couverture de test unitaire de l'API sonar de repos.

Comment puis-je échouer la construction si elle tombe en dessous d'une valeur définie?

7
rathna

JaCoCo offre cette fonctionnalité.

JaCoCo avec Règles de configuration

Définissez le plug-in JaCoCo à l'aide des règles de configuration COVEREDRATIO pourLINE et BRANCH:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.7.201606060606</version>
    <executions>
        <execution>
            <id>default-prepare-agent</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>check</id>
            <goals>
                <goal>check</goal>
            </goals>
            <configuration><rules><rule>
             <element>CLASS</element>
             <limits>
              <limit>
                <counter>LINE</counter>
                <value>COVEREDRATIO</value>
                <minimum>0.80</minimum>
              </limit>
              <limit>
                <counter>BRANCH</counter>
                <value>COVEREDRATIO</value>
                <minimum>0.80</minimum>
              </limit>
            </limits>
            <excludes>
               <exclude>com.xyz.ClassToExclude</exclude>
            </excludes>
          </rule></rules></configuration>
        </execution>
    </executions>
</plugin>

Diverses options

Les options counter prises en charge sont les suivantes:

  • LIGNE
  • BRANCHE
  • INSTRUCTION
  • COMPLEXITÉ
  • MÉTHODE
  • CLASSE

Je pense que INSTRUCTION vous permettrait de faire une vérification générale (vérifiez que le projet dans son ensemble a au moins 0,80 de couverture, par exemple).

Exemple avec INSTRUCTION - couverture globale des instructions de 80%

Cet exemple nécessite une couverture d’instruction globale de 80% et aucun cours ne doit être omis:

<rules>
  <rule implementation="org.jacoco.maven.RuleConfiguration">
    <element>BUNDLE</element>
    <limits>
      <limit implementation="org.jacoco.report.check.Limit">
        <counter>INSTRUCTION</counter>
        <value>COVEREDRATIO</value>
        <minimum>0.80</minimum>
      </limit>
      <limit implementation="org.jacoco.report.check.Limit">
        <counter>CLASS</counter>
        <value>MISSEDCOUNT</value>
        <maximum>0</maximum>
      </limit>
    </limits>
  </rule>
</rules>

Message en cas d'échec

Si la couverture ne correspond pas à vos attentes, le message suivant échoue:

[WARNING] Rule violated for class com.sampleapp.SpringConfiguration: lines covered ratio is 0.00, but expected minimum is 0.80
[WARNING] Rule violated for class com.sampleapp.Launcher: lines covered ratio is 0.33, but expected minimum is 0.80
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

Les exclusions

Dans l'exemple ci-dessus, j'ai défini <exclude>com.xyz.ClassToExclude</exclude>. Je pense que vous constaterez que vous devez ajouter de nombreuses exclusions. Les projets contiennent généralement de nombreuses classes non testables (Spring Configuration, beans Java, etc.). Vous pourrez peut-être aussi utiliser une expression régulière.


sources:

13
alexbt
Specify the datFile location if it is not under default folder.

<execution>
                <id>check</id>
                <goals>
                    <goal>check</goal>
                </goals>
                <configuration>
                  <dataFile><path-to-jacoc-ut.exec></dataFile>
                 <rules><rule>
                 <element>CLASS</element>
                 <limits>
                  <limit>
                    <counter>LINE</counter>
                    <value>COVEREDRATIO</value>
                    <minimum>0.80</minimum>
                  </limit>
                  <limit>
                    <counter>BRANCH</counter>
                    <value>COVEREDRATIO</value>
                    <minimum>0.80</minimum>
                  </limit>
                </limits>
                <excludes>
                   <exclude>com.xyz.ClassToExclude</exclude>
                </excludes>
              </rule></rules></configuration>
            </execution>
0
user3069716