Couverture tests Jacoco

De EjnTricks
Révision de 3 décembre 2018 à 13:43 par Etienne (discussion | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

Pour tout développement, il est important de mettre en place des test unitaires / intégrations afin de prévenir des régressions lors des modifications. Mais il est également nécessaire de contrôler le taux de couverture du code. Le plugin Jacoco permet de générer un rapport sur les tests et cet article présente une mise en place simple dans un projet Maven.

A noter que le rapport généré est directement lisible par Sonar, et les données sont intégrés dans les rapports sans configuration spécifique.

Les exemples décrits sont disponibles sous ce lien : http://www.svn.jouvinio.net/study/trunk/maven/jacoco-maven-plugin


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png Objectifs

Le plugin est utilisé afin de générer les rapport de couverture pour les tests unitaires mais également d'intégration.

Add-file-icon.png Répertoires de source

Pour mémoire, les repertoires standards d'un proet Maven sont les suivants.

  • src/main/java
  • src/main/resources
  • src/test/java
  • src/test/resources

Les sources relatives aux tests d'intégration sont placés dans les deux répertoire suivants.

  • src/it/java
  • src/it/resources

L'utilisation du plugin build helper va permettre de rajouter le nouveau répertoire de source.

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <id>add-test-source</id>
            <phase>generate-test-sources</phase>
            <goals>
              <goal>add-test-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>src/it/java</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>

Le répertoire de resources est ajouté avec la confguration testResources classqique dans les fichiers pom.xml.

    <testResources>
      <testResource>
        <directory>src/test/resources</directory>
      </testResource>
      <testResource>
        <directory>src/it/resources</directory>
      </testResource>
    </testResources>


Java format icon.png Classe example

Le projet mis en place est assez simple. La classe fr.ejn.tutorial.maven.jacocoMavenPlugin.model qui est un simple POJO pour décrire une utilisateur avec trois propriétés.

  • id
  • name
  • surname

La classe fr.ejn.tutorial.maven.jacocoMavenPlugin.service.UserServiceImpl correspond à un simple service qui permet de générer un message de bienvenue pour un utilisateur identifié par son id. Une recherche est réalisé sur une instance de l'interface fr.ejn.tutorial.maven.jacocoMavenPlugin.repository.UserRepository.


Icon-log.png Tests

Un seul test unitaire est mis en place sur la classe fr.ejn.tutorial.maven.jacocoMavenPlugin.model.User.

Le test d'intégration est en charge de valider le code du service fr.ejn.tutorial.maven.jacocoMavenPlugin.service.UserServiceImpl.


Icon-Configuration-Settings.png Configuration pom

Afin d'utiliser le plugin jacoco-maven-plugin, il suffit d'injecter une configuration plugin dans la section build du fichier pom. De nombreux exemples sont disponibles sur internet, mais la simple configuration suivante permette de prendre en compte les deux tpes de tests.

      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.2</version>
        <executions>
          <execution>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
          </execution>
          <execution>
            <id>report</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>report</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

Ainsi, lors de l'exécution du plugin, un fichier jacoco.exec est généré dans le répertoire target du projet.


Start-icon.png Exécution

Le goal test pert de déclencher les tests unitaires, mais également le goal package. Dans le cadre de cet article, le code couvert sera donc uniquement sur la classe fr.ejn.tutorial.maven.jacocoMavenPlugin.model.User. Aucun test ne sera exécuté sur la classe fr.ejn.tutorial.maven.jacocoMavenPlugin.service.UserServiceImpl, et le rapport indiquera qu'aucune ligne n'est couverte.

Les goals integration-test et verify déclenche l'exécution des tests d'intégrations, qui seront alors pris en compte dans le rapport d'exécution.


Viewer icon.png Voir aussi

Site référence pour cet article: https://www.baeldung.com/jacoco