GLO-4002 2026
Temps estimé: 30 minutes

Exercices à propos de la couverture

Ces exercices visent à vous montrer comment vérifier la couverture du code d'une application Java.

1. Outils

Il existe un très grand nombre d'outils permettant de vérifier la couverture du code.

Les plus populaires en Java sont:

  • JaCoCo
  • Open Clover
  • Cobertura
  • Serenity
  • JCov

Vous êtes libres d'utiliser celui que vous voulez. Il est même recommandé d'en essayer plusieurs avant de faire un choix.

Pour cet exercice, nous allons utiliser JaCoCo.

2. Préparation

Créez un nouveau projet Java avec Maven.

Ajoutez les dépendances suivantes:

pom.xml:
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.7.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.7.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>3.5.13</version>
    <scope>test</scope>
</dependency>

et le plugin suivant:

pom.xml:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M5</version>
</plugin>

3. Faire fonctionner JaCoCo

Vous avez une application contenant la classe suivante:

toilet.java:
public class Toilet {

    private int litersOfWater;

    public Toilet(int litersOfWater) {
        this.litersOfWater = litersOfWater;
    }

    public int getLitersOfWater() {
        return litersOfWater;
    }

    public void flush() throws Exception {
        if (litersOfWater <= 0) {
            throw new Exception("IMPOSSIBLE TO FLUSH WITH NO WATER!");
        }

        litersOfWater--;
    }
}

Voici ce que vous devez faire:

  • Tester l'ensemble des comportements de la classe Toilet.
  • Intégrer JaCoCo au projet.
  • Configurer JaCoCo pour qu'il force une couverture de 100% du code et qu'il s'assure que toutes les classes soient testées.
☑️ Solution

Vous êtes supposés avoir deux tests:

  • Flusher avec assez d'eau.
  • Flusher avec 0 litre d'eau.

Voici la configuration de JaCoCo demandée:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.6</version>
    <executions>
        <execution>
            <id>default-prepare-agent</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
            <id>jacoco-check</id>
            <goals>
                <goal>check</goal>
            </goals>
            <configuration>
                <rules>
                    <rule>
                        <element>BUNDLE</element>
                        <limits>
                            <limit>
                                <counter>INSTRUCTION</counter>
                                <value>COVEREDRATIO</value>
                                <minimum>1.00</minimum>
                            </limit>
                            <limit>
                                <counter>CLASS</counter>
                                <value>MISSEDCOUNT</value>
                                <maximum>0</maximum>
                            </limit>
                        </limits>
                    </rule>
                </rules>
            </configuration>
        </execution>
    </executions>
</plugin>

Notez que 100% de couverture n'est pas toujours pertinent. Certaines classes, comme les DTO, n'ont pas besoin d'être testées.

4. On se pratique

Ajoutez les comportements suivants au code:

  • Un humain peut flusher une toilette.
  • Seulement un plombier peut ajouter de l'eau.

Assurez-vous de respecter la couverture du code.

5. Conclusion

La couverture du code est un bon moyen de forcer l'écriture de tests.

Certaines compagnies bloquent même leurs pipelines de déploiement si du code a été ajouté sans test.

Il est cependant dangereux de s'y fier entièrement, car ça ne veut pas dire que les tests écrits sont sans erreurs.

6. Bonus

Pour ceux qui veulent se pratiquer davantage, il existe plusieurs exercices sur Internet, dont le suivant: https://github.com/goeckeler/katas/tree/master/katas/Easter%20Egg%20Hunt