Assurer la qualité et la robustesse des projets Android peut être un défi sans une stratégie de tests efficace.
Des tests insuffisants peuvent entraîner des bugs en production, compromettant la fiabilité de l’application.
Cet article explore l’utilisation de la couverture des tests avec Jacoco pour sécuriser la qualité de vos projets Android.
Développez des applications Android solides, fiables et efficaces avec une approche TDD
Dans ce chapitre, nous allons explorer la couverture des tests, un élément crucial pour assurer la qualité et la robustesse de vos projets Android. La couverture des tests vous permet de déterminer quelles parties de votre code sont testées et quelles parties ne le sont pas. Cette information est essentielle pour éviter les tests insuffisants ou les zones non testées, qui peuvent entraîner des bugs en production.
La couverture des tests mesure la proportion de code exécutée lors des tests automatisés. Il existe plusieurs types de couverture :
- Couverture des lignes :Combien de lignes de code ont été exécutées pendant les tests ?
- Couverture des classes :Combien de classes ont été couvertes par les tests ?
- Couverture des méthodes :Combien de méthodes dans les classes sont couvertes ?
Cette figure illustre les différents types de couverture des tests dans un projet. Elle présente trois dimensions principales pour mesurer la couverture des tests :
Couverture des lignes : Elle mesure le pourcentage de lignes de code exécutées lors des tests. Cela permet de savoir quelles parties spécifiques du code source sont effectivement vérifiées par les tests automatisés.
Couverture des classes : Cette mesure évalue combien de classes du projet sont couvertes par les tests. L’objectif est de s’assurer que chaque classe importante de l’application est testée de manière appropriée.
Couverture des méthodes : Cette métrique mesure le pourcentage de méthodes testées dans chaque classe, afin de garantir que toutes les fonctionnalités internes sont testées.
Un bon taux de couverture des tests vous permet d’évaluer la qualité de vos tests et d’identifier les zones de code non testées qui pourraient contenir des bugs. Attention cependant à ne pas viser un taux élevé de couverture en créant des tests artificiels ou non pertinents. Le but est de tester correctement les fonctionnalités critiques de votre application.
Configurer Jacoco pour les tests Android
Introduction à Jacoco
Jacoco (Java Code Coverage) est un outil qui permet de générer des rapports de couverture pour vos tests. Avec les dernières versions d’Android Studio (à partir de la version 2023.2), Jacoco est fourni automatiquement, ce qui facilite son intégration dans les projets Android.
Étapes clés pour la couverture des tests
Ajouter le plugin Jacoco
Cependant, si vous utilisez une ancienne version d’Android Studio ou si vous souhaitez personnaliser davantage la configuration, vous pouvez ajouter Jacoco manuellement. Voici comment ajouter le plugin Jacoco dans le fichier build.gradle :
Ce code Gradle configure un projet Android en Kotlin et ajoute le plugin Jacoco pour mesurer la couverture des tests. Le plugin com.android.application gère les fonctionnalités d’une application Android, kotlin-android permet l’utilisation de Kotlin, et jacoco génère des rapports de couverture pour s’assurer que le code est bien testé.
plugins{
id 'com.android.application' id 'kotlin-android' id 'jacoco' // Ajout du
// plugin
// Jacoco
}
Voici le resultat dans android studion
Cette figure montre la structure d’un projet Android dans Android Studio, plus spécifiquement le fichier build.gradle au niveau supérieur, qui configure les plugins pour le projet. Les plugins com.android.application , kotlin-android , et jacoco sont déclarés
Paramétrer Jacoco dans un fichier séparé
Une bonne pratique consiste à externaliser la configuration de Jacoco dans un fichier à part, que vous incluez ensuite dans votre projet. Créez un fichier jacoco.gradle.kts dans le répertoire racine de votre projet :
Ce code configure un fichier jacoco.gradle.kts pour intégrer et configurer Jacoco dans un projet Kotlin. Le plugin Jacoco est activé avec la version spécifiée 0.8.7 , qui est une version de l’outil de mesure de couverture des tests. La configuration indique que pour toutes les tâches de type Test , un rapport Jacoco sera généré après l’exécution des tests via la tâche jacocoTestReport . Cette tâche est enregistrée pour créer un rapport de couverture sous différents formats : le rapport au format HTML sera généré dans le répertoire build/jacocoHtml , tandis que les rapports en XML seront aussi produits, facilitant l’analyse de la couverture des tests. Cela permet d’obtenir une vue détaillée des parties du code couvertes ou non par les tests, ce qui aide à améliorer la qualité du projet
// fichier jacoco.gradle.kts
plugins{id("jacoco")} jacoco{
toolVersion = "0.8.7" // Version de Jacoco
} tasks.withType {
finalizedBy("jacocoTestReport") // Générer le rapport après les tests}
tasks.register("jacocoTestReport") {
reports {
xml.required.set(true) csv.required.set(false)
html.outputLocation.set(file("${buildDir}/jacocoHtml"))
}
}
Le dossier gradle contient les fichiers nécessaires à la gestion de la compilation du projet avec Gradle, y compris des scripts permettant d’exécuter des commandes de manière indépendante. Le répertoire jacoco est dédié à l’intégration de Jacoco, un outil qui mesure la couverture du code par les tests, aidant ainsi à identifier les parties du code couvertes et celles qui ne le sont pas. Ces outils sont essentiels pour assurer la qualité du code et garantir une couverture suffisante avant le déploiement de l’application.
Intégration de Jacoco dans build.gradle
Une fois le fichier de configuration jacoco.gradle.kts créé, il faut l’inclure dans le fichier build.gradle du module :
Ce code permet d’inclure et d’appliquer des configurations définies dans un autre fichier Gradle, ce qui favorise la réutilisabilité et la modularité du code. Dans ce cas, le fichier jacoco.gradle.kts contient des paramètres spécifiques pour la mesure de la couverture des tests avec Jacoco, tels que la version à utiliser et les rapports à générer. Cela simplifie la gestion des dépendances et centralise les configurations liées à Jacoco, facilitant ainsi la maintenance du projet.
apply from : 'jacoco.gradle.kts'
Exécuter les tests avec couverture
Une fois Jacoco paramétré, vous pouvez exécuter vos tests avec la couverture directement depuis Android Studio. L’option « Run with Coverage » vous permet d’exécuter les tests tout en générant un rapport de couverture.
Cette figure présente le processus de mesure de la couverture des tests à l’aide de Jacoco . Elle commence par la configuration de Jacoco , qui inclut la spécification des paramètres nécessaires pour l’outil de couverture. Ensuite, le lancement des tests permet d’exécuter les tests automatisés du projet, durant lesquels Jacoco enregistre quelles parties du code sont exécutées. Enfin, après l’exécution des tests, le processus se termine par la génération du rapport de couverture , qui fournit une vue d’ensemble des portions du code couvertes par les tests, aidant ainsi les développeurs à identifier les zones à améliorer pour garantir la qualité du code.
Exemple de test avec Jacoco
Supposons que vous ayez une simple classe Model avec deux propriétés id et nom, et que vous souhaitiez tester si ces propriétés sont correctement affectées :
Ce code définit une data class en Kotlin appelée Model , qui représente un modèle de données avec deux propriétés : un id de type Int et un nom de type String , permettant de stocker des informations de manière structurée et concise.
// Model.kt
data class Model(val id : Int, val nom : String)
Un exemple de test unitaire pour cette classe pourrait être :
Ce code effectue un test unitaire de la classe Model en Kotlin, vérifiant que l’initialisation d’un objet de type Model avec un id et un nom se déroule correctement, en utilisant des assertions pour comparer les valeurs attendues avec celles de l’objet créé.
// ModelTest.kt
import org.junit.Assert.assertEquals import org.junit.Test class ModelTest{@Test fun `test Model initialization`(){val wine = Model(1, "Chard") assertEquals(1, w.id) assertEquals("Chard", w.nom) } }
Élément | Description |
---|---|
Nom du Fichier | ModelTest.kt |
Importation des Assertions | import org.junit.Assert.assertEquals : Importe la méthode assertEquals pour comparer des valeurs. |
Importation des Tests | import org.junit.Test : Importe l’annotation @Test pour indiquer qu’une méthode est un test unitaire. |
Classe de Test | class ModelTest : Définit une classe de test pour le modèle. |
Méthode de Test | @Test fun test Model initialization : Indique que la méthode teste l’initialisation du modèle. |
Création d’un Objet | val wine = Model(1, « Chard ») : Crée une instance de la classe Model avec un ID et un nom. |
Vérification de l’ID | assertEquals(1, wine.id) : Vérifie que l’ID du vin est égal à 1. |
Vérification du Nom | assertEquals(« Chard », wine.nom) : Vérifie que le nom du vin est « Chard ». |
Pour exécuter ce test avec la couverture, faites un clic droit sur le fichier et choisissez « Run with Coverage » . Cela générera un rapport qui affichera, par exemple :
- 100% des classes couvertes
- 100% des méthodes couvertes
- 100% des lignes couvertes
Analyser les rapports de couverture Jacoco
Après avoir exécuté les tests, Jacoco génère un rapport de couverture que vous pouvez consulter dans le répertoire /build/reports/jacoco . Vous y trouverez un fichier HTML qui vous permet de visualiser les parties de code couvertes et non couvertes.
Cette figure montre la structure du projet tracker_domain dans Android Studio, mettant en évidence le dossier reports sous le répertoire build . Le dossier reports contient des sous-dossiers tels que test-results , qui stockent les résultats des tests exécutés, et tmp , qui est utilisé pour des fichiers temporaires générés lors des processus de construction. Ces rapports sont essentiels pour analyser les performances des tests et la couverture de code, permettant aux développeurs d’identifier les zones à améliorer dans l’application.
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 la couverture des tests améliore-t-elle la qualité du code Android?
Quelles sont les étapes pour configurer Jacoco dans Android Studio?
Comment interpréter les rapports de couverture générés par Jacoco?
Pourquoi ne faut-il pas viser un taux de couverture trop élevé?
Comment exécuter des tests avec couverture dans Android Studio?
Conclusion
La couverture des tests est un aspect crucial du développement Android. Comment utilisez-vous Jacoco pour identifier les zones de votre code nécessitant plus de tests?