Couverture tests Jacoco
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
Sommaire
Votre avis
Nobody voted on this yet
|
|
Objectifs
Le plugin est utilisé afin de générer les rapport de couverture pour les tests unitaires mais également d'intégration.
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>
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
.
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
.
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.
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.
Voir aussi
Site référence pour cet article: https://www.baeldung.com/jacoco