Assurer une couverture complète des tests unitaires dans vos projets Java ou Kotlin est souvent un défi.
Des tests insuffisants peuvent laisser des failles dans le code, compromettant la qualité et la stabilité de l’application.
Jacoco offre une solution puissante pour mesurer la couverture de code, générer des rapports détaillés et améliorer la qualité des tests, abordée dans cet article.
Développez des applications Android solides, fiables et efficaces avec une approche TDD
Jacoco est un outil essentiel pour mesurer la couverture de code dans vos projets Java ou Kotlin, vous permettant de générer des rapports détaillés sur l’état de vos tests unitaires. Ce chapitre vous fournira une explication complète de la configuration, de l’exécution des tâches, et de la génération des rapports de couverture, tout en détaillant l’importance des métriques et des critères de satisfaction.
Rapports de Couverture avec Jacoco
La génération des rapports peut être faite de différentes manières, notamment en HTML pour une visualisation simple, ou en XML ou CSV pour une analyse plus approfondie et des intégrations automatiques.
La figure au-dessus illustre le processus de génération des rapports de couverture de code, montrant les différents formats dans lesquels ces rapports peuvent être produits, notamment HTML , XML et CSV . Le format HTML est principalement utilisé pour la visualisation des résultats de couverture de manière conviviale, tandis que XML est adapté pour l’ analyse , et le format CSV permet des intégrations automatiques avec d’autres outils ou systèmes
Analyse du Rapport de Couverture Java
Une fois que la tâche de génération de rapport est terminée, vous pouvez visualiser le rapport en ouvrant le fichier index.html. Ce rapport vous donnera des informations détaillées sur :
- Le pourcentage de couverture par package, classe, et méthode.
- Les branches manquées , c’est-à-dire des conditions non testées.
- La complexité cyclomatique :une métrique pour évaluer la difficulté des tests.
Exemple de Visualisation de Rapport HTML
Lorsque vous ouvrez le fichier index.html, vous voyez une vue d’ensemble de la couverture des tests pour chaque package et classe
Cette figure affiche un rapport de couverture de code généré par Jacoco pour la classe CoureurDomainModel , indiquant que toutes les instructions de la classe ont été exécutées lors des tests, ce qui donne une couverture de 100 % . Les méthodes getId() et getNom() affichent également une couverture complète, tandis que le rapport note des instructions manquées dans le constructeur de la classe, ce qui pourrait nécessiter des tests supplémentaires pour garantir une couverture totale.
Les rapports vous permettent de naviguer à travers chaque classe, en vérifiant la couverture de chaque méthode et ligne de code. Si une ligne de code n’est pas couverte, elle sera mise en évidence, ce qui vous permet de cibler les tests manquants.
Critères de Couverture de Code
Dans un projet professionnel, il est souvent requis d’atteindre un certain seuil de couverture. Par exemple, une couverture de 80% des lignes et 70% des branches pourrait être exigée avant de pouvoir livrer un projet. Jacoco permet d’automatiser cette vérification et d’interrompre le processus de build si ces critères ne sont pas remplis.
Aspect | Détails |
---|---|
Seuil de couverture | Exigence de 80% des lignes et 70% des branches pour livrer un projet. |
Outil et action | JaCoCo vérifie la couverture et interrompt le build si les critères ne sont pas remplis. |
Configurer Jacoco Gradle pour Tests
Vous pouvez ajouter une tâche de vérification qui s’assure que votre projet respecte ces critères de couverture.
Ce code dans le fichier build.gradle.kts configure des règles de vérification de la couverture de tests avec Jacoco pour un projet Kotlin. Il définit des seuils de couverture, exigeant au minimum 80 % de couverture des lignes et 70 % de couverture des branches, afin de s’assurer que le code testé est suffisamment couvert avant la livraison. De plus, la tâche check dépend de la tâche jacocoTestCoverageVerification , intégrant ainsi la vérification de la couverture de code dans le processus de construction, ce qui permet d’interrompre le build si les critères de couverture ne sont pas atteints.
// build.gradle.kts
tasks.jacocoTestCoverageVerification {
violationRules {
rule {
limit{
minimum = 0.80.toBigDecimal() // Au moins 80% de couverture des lignes
} limit {
counter = "BRANCH" minimum =
0.70.toBigDecimal() // Au moins 70% de couverture des branches
}
}
}
}
tasks.check {
dependsOn(
tasks.jacocoTestCoverageVerification) // Ajouter la tâche de vérification
// dans le processus de build
}
Cette figure dans le fichier build.gradle.kts définit une tâche personnalisée appelée coverageVerification , qui utilise le type JacocoCoverageVerification pour vérifier la couverture de code générée par Jacoco lors de la construction du projet, en spécifiant des règles de violation qui exigent un minimum de 30 % de couverture des lignes dans le bundle de l’application.
Dans cet exemple, nous ajoutons une règle pour s’assurer que 80% des lignes et 70% des branches sont couvertes par les tests. Si ces seuils ne sont pas atteints, le processus de build sera interrompu.
Tâches Jacoco pour Qualité de Code
Pour exécuter les tâches Jacoco, vous pouvez utiliser la ligne de commande ou directement depuis Android Studio . Voici quelques exemples de commandes à utiliser :
Le code montre une série de commandes Gradle utilisées pour gérer le cycle de vie d’un projet. La première commande ./gradlew clean nettoie le projet en supprimant tous les fichiers générés lors des constructions précédentes, assurant ainsi un environnement de construction propre. Les deux commandes suivantes, ./gradlew test jacocoTestReport , exécutent les tests unitaires et génèrent un rapport de couverture de code avec Jacoco, tandis que ./gradlew check vérifie si le projet respecte les critères de couverture spécifiés, garantissant que la qualité du code est maintenue avant la livraison.
#Nettoyage du projet
./
gradlew clean
#Exécution des tests et génération du rapport Jacoco
./
gradlew test jacocoTestReport
#Vérification des critères de couverture
./
gradlew check
La figure au-dessus montre la sortie d’une exécution de la commande ./gradlew coverageVerification dans le terminal d’un projet Android, indiquant que la construction a réussi en une seconde avec un total de 22 tâches exécutées, toutes étant à jour. Le message « BUILD SUCCESSFUL » confirme que la vérification de la couverture de code a été réalisée avec succès, assurant que les critères de couverture définis dans la configuration de Jacoco ont été respectés.
Si tout fonctionne correctement, les rapports seront générés et vérifiés selon les critères définis.Analyse et Amélioration des Tests
Conclusion sur Jacoco et Couverture
Ce chapitre souligne l’importance de vérifier la couverture des tests à l’aide de Jacoco, un outil clé pour garantir la qualité du code. Il est essentiel de juger de la pertinence des tests pour s’assurer qu’ils couvrent les parties critiques de l’application. Ensuite, le paramétrage de Jacoco et le lancement des tâches associées permettent de mesurer efficacement la couverture de code. Enfin, l’exploitation des rapports générés offre une vue d’ensemble précieuse qui aide à identifier les zones nécessitant des améliorations, assurant ainsi une meilleure robustesse et fiabilité du projet.
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.
FAQ
Comment utiliser Jacoco pour améliorer la qualité des tests Java ?
Quels formats de rapport de couverture Jacoco propose-t-il ?
Quels sont les critères de satisfaction de couverture avec Jacoco ?
Comment configurer Jacoco avec Gradle pour vérifier la couverture de code ?
Comment exécuter les tâches de Jacoco dans Android Studio ?
Conclusion
L’utilisation de Jacoco pour vérifier la couverture des tests améliore considérablement la qualité du code dans vos projets Java. Envisagez-vous d’intégrer Jacoco dans vos prochains projets pour garantir une robustesse accrue ?