Introduction à Cobertura

1. Vue d'ensemble

Dans cet article, nous allons démontrer plusieurs aspects de la génération de rapports de couverture de code à l'aide de Cobertura .

En termes simples, Cobertura est un outil de reporting qui calcule la couverture de test pour une base de code - le pourcentage de branches / lignes accédées par des tests unitaires dans un projet Java.

2. Plug-in Maven

2.1. Configuration Maven

Afin de commencer à calculer la couverture de code dans votre projet Java, vous devez déclarer le plugin Cobertura Maven dans votre fichier pom.xml sous la section Reporting:

   org.codehaus.mojo cobertura-maven-plugin 2.7   

Vous pouvez toujours vérifier la dernière version du plugin dans le référentiel central Maven.

Une fois terminé, lancez Maven en spécifiant cobertura: cobertura comme objectif.

Cela créera un rapport de style HTML détaillé montrant les statistiques de couverture de code recueillies via l'instrumentation de code:

La métrique de couverture de ligne indique le nombre d'instructions exécutées lors de l'exécution des tests unitaires, tandis que la métrique de couverture de branche se concentre sur le nombre de branches couvertes par ces tests .

Pour chaque conditionnel, vous avez deux branches, donc en gros, vous finirez par avoir deux fois plus de branches que les conditionnelles.

Le facteur de complexité reflète la complexité du code - il augmente lorsque le nombre de branches dans le code augmente.

En théorie, plus vous avez de succursales, plus vous devez mettre en œuvre de tests pour augmenter le score de couverture de succursale.

2.2. Configuration du calcul et des vérifications de la couverture de code

Vous pouvez ignorer / exclure un ensemble spécifique de classes de l'instrumentation de code à l'aide des balises ignore et exclude :

 org.codehaus.mojo cobertura-maven-plugin 2.7    com/baeldung/algorithms/dijkstra/*   com/baeldung/algorithms/dijkstra/*    

Après le calcul de la couverture du code vient la phase de vérification . La phase de vérification garantit qu'un certain niveau de couverture du code est atteint .

Voici un exemple de base sur la façon de configurer la phase de vérification :

  true 75 85 75 85 75 85   com.baeldung.algorithms.dijkstra.* 60 50    

Lors de l'utilisation de l' indicateur haltOnFailure , Cobertura provoquera l'échec de la construction si l'une des vérifications spécifiées échoue.

Les balises branchRate / lineRate spécifient le score minimum acceptable de couverture de branche / ligne requis après l'instrumentation du code. Ces vérifications peuvent être étendues au niveau du package à l'aide des balises packageLineRate / packageBranchRate .

Il est également possible de déclarer des vérifications de règles spécifiques pour les classes dont les noms suivent un modèle spécifique en utilisant la balise regex . Dans l'exemple ci-dessus, nous nous assurons qu'un score de couverture de ligne / branche spécifique doit être atteint pour les classes du package com.baeldung.algorithms.dijkstra et ci-dessous.

3. Plug-in Eclipse

3.1. Installation

Cobertura est également disponible en tant que plugin Eclipse appelé eCobertura . Pour installer eCobertura pour Eclipse, vous devez suivre les étapes ci-dessous et installer Eclipse version 3.5 ou supérieure:

Étape 1: Dans le menu Eclipse, sélectionnez AideInstaller un nouveau logiciel . Ensuite, au travail avec le champ, entrez //ecobertura.johoop.de/update/ :

Étape 2: Sélectionnez Couverture de code eCobertura , cliquez sur «Suivant», puis suivez les étapes de l'assistant d'installation.

Maintenant qu'eCobertura est installé, redémarrez Eclipse et affichez la vue de la session de couverture sous Windows → Afficher la vue → Autre → Cobertura .

3.2. Utilisation d'Eclipse Kepler ou version ultérieure

Pour la nouvelle version d'Eclipse (Kepler, Luna, etc.), l'installation d' eCobertura peut causer des problèmes liés à JUnit - la nouvelle version de JUnit fournie avec Eclipse n'est pas entièrement compatible avec le vérificateur de dépendances d' eCobertura :

Cannot complete the install because one or more required items could not be found. Software being installed: eCobertura 0.9.8.201007202152 (ecobertura.feature.group 0.9.8.201007202152) Missing requirement: eCobertura UI 0.9.8.201007202152 (ecobertura.ui 0.9.8.201007202152) requires 'bundle org.junit4 0.0.0' but it could not be found Cannot satisfy dependency: From: eCobertura 0.9.8.201007202152 (ecobertura.feature.group 0.9.8.201007202152) To: ecobertura.ui [0.9.8.201007202152]

Pour contourner ce problème, vous pouvez télécharger une version antérieure de JUnit et la placer dans le dossier des plugins Eclipse.

Cela peut être fait en supprimant le dossier org.junit. *** de % ECLIPSE_HOME% / plugins , puis en copiant le même dossier à partir d'une ancienne installation Eclipse compatible avec eCobertura .

Une fois terminé, redémarrez votre Eclipse IDE et réinstallez le plugin en utilisant le site de mise à jour correspondant.

3.3. Rapports de couverture du code dans Eclipse

Afin de calculer la couverture de code par un test unitaire, cliquez avec le bouton droit sur votre projet / test pour ouvrir le menu contextuel, puis choisissez l'option Cover As → JUnit Test .

Dans la vue Session de couverture , vous pouvez consulter le rapport de couverture de ligne / succursale par classe:

Les utilisateurs de Java 8 peuvent rencontrer une erreur courante lors du calcul de la couverture de code:

java.lang.VerifyError: Expecting a stackmap frame at branch target ...

Dans ce cas, Java se plaint du fait que certaines méthodes n'ont pas de mappage de pile approprié, en raison du vérificateur de bytecode plus strict introduit dans les nouvelles versions de Java.

Ce problème peut être résolu en désactivant la vérification dans la machine virtuelle Java.

Pour ce faire, cliquez avec le bouton droit sur votre projet pour ouvrir le menu contextuel, sélectionnez Couvrir en tant que , puis ouvrez la vue Configurations de couverture . Dans l'onglet arguments, ajoutez l' indicateur -noverify en tant qu'argument VM. Enfin, cliquez sur le bouton de couverture pour lancer le calcul de la couverture.

Vous pouvez également utiliser l'indicateur -XX: -UseSplitVerifier , mais cela ne fonctionne qu'avec Java 6 et 7, car le vérificateur fractionné n'est plus pris en charge dans Java 8.

4. Conclusion

Dans cet article, nous avons brièvement montré comment utiliser Cobertura pour calculer la couverture de code dans un projet Java. Nous avons également décrit les étapes requises pour installer eCobertura dans votre environnement Eclipse.

Cobertura est un outil de couverture de code génial mais simple, mais pas activement maintenu, car il est actuellement surclassé par des outils plus récents et plus puissants comme JaCoCo.

Enfin, vous pouvez consulter l'exemple fourni dans cet article dans le projet GitHub .