Intégrer Jacoco avec Maven
C’est quoi JaCoCo ?
JaCoCo http://www.eclemma.org/jacoco est une bibliothèque de couverture de code Java gratuite distribuée sous la licence publique Eclipse.
Il est très simple d’ajouter à tous les types de construction, y compris ANT et Maven.
Il est également très simple d’ajouter aux conteneurs Java ou à une machine virtuelle Java autonome.
Configurer JaCoCo avec Maven
Ajouter ces balises de propriétés à pom.xml
1 2 3 4 5 6 7 |
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <jacoco.it.execution.data.file>${project.build.directory}/coverage-reports/jacoco-it.exec</jacoco.it.execution.data.file> <jacoco.ut.execution.data.file>${project.build.directory}/coverage-reports/jacoco-ut.exec</jacoco.ut.execution.data.file> <jacoco.version>0.7.5.201505241946</jacoco.version> <skip.integration.tests>true</skip.integration.tests> <skip.unit.tests>false</skip.unit.tests> |
Ajouter ces plugins à pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <source>${java.version}</source> <target>${java.version}</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.version}</version> <executions> <execution> <id>pre-unit-test</id> <goals> <goal>prepare-agent</goal> </goals> <configuration> <destFile>${jacoco.ut.execution.data.file}</destFile> <propertyName>surefireArgLine</propertyName> </configuration> </execution> <execution> <id>post-unit-test</id> <phase>test</phase> <goals> <goal>report</goal> </goals> <configuration> <dataFile>${jacoco.ut.execution.data.file}</dataFile> <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory> </configuration> </execution> <execution> <id>pre-integration-test</id> <phase>pre-integration-test</phase> <goals> <goal>prepare-agent</goal> </goals> <configuration> <propertyName>failsafeArgLine</propertyName> </configuration> </execution> <execution> <id>post-integration-test</id> <phase>post-integration-test</phase> <goals> <goal>report</goal> </goals> <configuration> <dataFile>${jacoco.it.execution.data.file}</dataFile> <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>${surefireArgLine}</argLine> <skipTests>${skip.unit.tests}</skipTests> <excludes> <exclude>**/IT*.java</exclude> </excludes> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <executions> <execution> <id>integration-tests</id> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> <configuration> <argLine>${failsafeArgLine}</argLine> <skipTests>${skip.integration.tests}</skipTests> </configuration> </execution> </executions> </plugin> |
Ajouter une méthode de test
src/main/java/com.intellitech.jacoco.example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package com.intellitech.jacoco.example; public class Application { public void getGender(String gender) { if (gender.equalsIgnoreCase("Men")) { System.out.println("It's a man"); } else { System.out.println("It's a women"); } } } |
src/test/java/com.intellitech.jacoco.example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package com.intellitech.jacoco.example; import org.junit.Test; public class ApplicationTest { @Test public void getGenderTest() { Application application = new Application(); application.getGender("Men"); } } |
Lancer l’application
Pour exécuter les exemples, exécutez la commande suivante
1 |
mvn clean test |
Consulter les résultats
Les résultats sont publiés dans target/site/jacoco comme vous voyez dans l’image suivante
On peut aussi explorer une vue plus détaillée pour chaque classe Java comme et vous voyez la classe comme l’exemple suivant :
Analyse du rapport
Les rapports JaCoCo vous aident à analyser visuellement la couverture de code en utilisant des couleurs en diamants pour les branches et des couleurs d’arrière-plan pour les lignes.
Le losange rouge signifie qu’aucune branche n’a pas été exercée pendant la phase de test.
Le diamant jaune montre que le code est partiellement couvert – certaines branches n’ont pas été exercées
Le diamant vert signifie que toutes les branches ont été exercées au cours de l’essai