Couverture de code en Kotlin : de 0 à 80% en une soirée

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi les tests « verts » sont une illusion ?

\n\n

Vous lancez les tests, vous voyez la barre verte tant attendue et vous vous sentez comme un super-héros. Mais que diriez-vous si je vous disais que vos tests pourraient être inutiles ? Qu'ils ne vérifient qu'une ligne sur dix, et que les neuf autres sont une « zone morte » où se cachent les bugs ? C'est là qu'intervient la couverture de code (code coverage). Ce ne sont pas seulement des chiffres pour un rapport, mais votre radar personnel, qui montre à quel point les tests « couvrent » votre code Kotlin.

\n\n

Dans cet article, nous allons voir comment transformer la couverture de code en Kotlin d'une métrique ennuyeuse en un outil puissant. Vous découvrirez quels outils fonctionnent vraiment, ce que signifient les pourcentages et comment ne pas tomber dans le piège des « 100% de couverture ». C'est parti !

\n\n

Qu'est-ce que la couverture de code et pourquoi est-elle importante pour Kotlin ?

\n\n

Imaginez que votre code est un terrain de golf et que les tests sont les joueurs. La couverture de code est une carte qui montre quelles parties du terrain les joueurs ont parcourues. Si les joueurs évitent un bunker dangereux (un algorithme complexe), vous le saurez.

\n\n

Dans le monde de Kotlin, où nous utilisons souvent des coroutines, des classes sealed et des fonctions d'extension, des tests naïfs peuvent facilement manquer des branches entières de logique. Les métriques de couverture aident à répondre à trois questions :

\n
    \n
  • Quel pourcentage de lignes de code a été exécuté pendant les tests ?
  • \n
  • Quelles conditions (if/else, when) ont été vérifiées ?
  • \n
  • Quelles fonctions sont restées sans attention ?
  • \n
\n\n

Sans ces métriques, vous risquez de mettre en production un code qui fonctionne « seulement le lundi ».

\n\n

Outils pour mesurer la couverture en Kotlin : Top 3

\n\n

Dans l'écosystème Kotlin, il y a trois acteurs principaux qui vous aideront à mesurer le code coverage. Faisons connaissance avec chacun d'eux.

\n\n

1. JaCoCo (Java Code Coverage) — Le vétéran

\n

L'outil le plus populaire. Il fonctionne au niveau du bytecode, donc il convient aussi bien à Java qu'à Kotlin. Son principal avantage est une statistique riche et une intégration avec CI/CD.

\n\n

Comment l'ajouter dans Gradle (Kotlin DSL) :

\n
plugins {\n    id("jacoco")\n}\n\ntasks.jacocoTestReport {\n    dependsOn(tasks.test) // Lance les tests avant le rapport\n    reports {\n        xml.required.set(true)\n        html.required.set(true) // Génère un beau rapport HTML\n    }\n}
\n\n

Après avoir exécuté ./gradlew jacocoTestReport, vous obtiendrez un fichier HTML où les lignes non couvertes sont surlignées en rouge. Pratique, non ?

\n\n

2. Kover — Le joueur moderne

\n

Spécialement conçu pour Kotlin. Contrairement à JaCoCo, Kover fonctionne au niveau de l'AST (arbre syntaxique abstrait), ce qui le rend plus précis pour les constructions spécifiques à Kotlin (par exemple, les fonctions inline).

\n\n

Ajout de Kover :

\n
plugins {\n    id("org.jetbrains.kotlinx.kover") version "0.7.3"\n}\n\nkover {\n    excludeSourceSets {\n        names("test") // Exclut les tests eux-mêmes du rapport\n    }\n}
\n\n

Kover génère des rapports aux formats HTML, XML et même sous forme de badges pour GitHub. C'est le choix idéal pour un projet purement Kotlin.

\n\n

3. IntelliJ IDEA Coverage — Pour une vérification rapide

\n

Un outil intégré. Vous lancez les tests avec couverture (icône verte « Run with Coverage ») et vous voyez le code coloré directement dans l'IDE. Pratique pour le développement local, mais pas pour le CI.

\n\n

Conseil : Utilisez IntelliJ pour des itérations rapides, et JaCoCo ou Kover pour le rapport final.

\n\n

Métriques de couverture de code : Que signifient ces pourcentages ?

\n\n

Quand vous voyez « 80% de couverture », ça semble cool. Mais 80% de quoi ? Décortiquons les métriques principales que tous les outils fournissent.

\n\n

Line Coverage (Couverture de lignes)

\n

La métrique la plus simple. Combien de lignes du code source ont été touchées par les tests. Si une ligne n'a jamais été exécutée, elle est considérée comme non couverte.

\n

Exemple :

\n
fun process(value: Int): String {\n    if (                

Blogs

Book Recommendations