Einführung in Cobertura

1. Übersicht

In diesem Artikel werden verschiedene Aspekte der Erstellung von Berichten zur Codeabdeckung mit Cobertura erläutert .

Einfach ausgedrückt ist Cobertura ein Berichterstellungstool, das die Testabdeckung für eine Codebasis berechnet - den Prozentsatz der Zweige / Zeilen, auf die Unit-Tests in einem Java-Projekt zugreifen.

2. Maven Plugin

2.1. Maven-Konfiguration

Um mit der Berechnung der Codeabdeckung in Ihrem Java-Projekt zu beginnen, müssen Sie das Cobertura Maven-Plugin in Ihrer pom.xml- Datei im Berichtsbereich deklarieren :

   org.codehaus.mojo cobertura-maven-plugin 2.7   

Sie können jederzeit die neueste Version des Plugins im zentralen Maven-Repository überprüfen.

Sobald Sie fertig sind, führen Sie Maven aus und geben Sie cobertura an: cobertura als Ziel.

Dadurch wird ein detaillierter Bericht im HTML-Stil erstellt, der Statistiken zur Codeabdeckung enthält, die über die Code-Instrumentierung erfasst wurden:

Die Metrik für die Zeilenabdeckung zeigt an, wie viele Anweisungen im Lauf der Unit-Tests ausgeführt werden, während sich die Metrik für die Zweigabdeckung darauf konzentriert, wie viele Zweige von diesen Tests abgedeckt werden .

Für jede Bedingung haben Sie zwei Zweige, sodass Sie im Grunde doppelt so viele Zweige wie Bedingungen haben.

Der Komplexitätsfaktor spiegelt die Komplexität des Codes wider - er steigt, wenn die Anzahl der Zweige im Code zunimmt.

Je mehr Zweige Sie haben, desto mehr Tests müssen Sie theoretisch implementieren, um die Bewertung der Zweigabdeckung zu erhöhen.

2.2. Konfigurieren der Berechnung und Überprüfung der Codeabdeckung

Sie können einen bestimmten Satz von Klassen mit den Tags ignore und exclude von der Code-Instrumentierung ignorieren / ausschließen :

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

Nach der Berechnung der Codeabdeckung folgt die Überprüfungsphase . Die Überprüfungsphase stellt sicher, dass ein bestimmter Grad an Codeabdeckung erreicht wird .

Hier ist ein einfaches Beispiel dafür, wie die Konfiguration der Kontrollphase:

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

Bei Verwendung des haltOnFailure- Flags führt Cobertura dazu, dass der Build fehlschlägt, wenn eine der angegebenen Prüfungen fehlschlägt.

Die branchRate / lineRate- Tags geben die nach der Code-Instrumentierung erforderliche Mindestanzahl für die Branch / Line-Abdeckung an. Diese Überprüfungen können mithilfe der Tags packageLineRate / packageBranchRate auf Paketebene erweitert werden .

Es ist auch möglich, mithilfe des Regex- Tags bestimmte Regelprüfungen für Klassen mit Namen zu deklarieren, die einem bestimmten Muster folgen . Im obigen Beispiel stellen wir sicher, dass für Klassen im Paket com.baeldung.algorithms.dijkstra und darunter eine bestimmte Bewertung der Linien- / Zweigabdeckung erreicht werden muss .

3. Eclipse Plugin

3.1. Installation

Cobertura ist auch als Eclipse-Plugin namens eCobertura verfügbar . Um eCobertura für Eclipse zu installieren , müssen Sie die folgenden Schritte ausführen und Eclipse Version 3.5 oder höher installieren:

Schritt 1: Wählen Sie im Eclipse-Menü HilfeNeue Software installieren . Geben Sie dann bei der Arbeit mit dem Feld //ecobertura.johoop.de/update/ ein :

Schritt 2: Wählen Sie eCobertura Code Coverage aus , klicken Sie auf „ Weiter “ und befolgen Sie die Schritte im Installationsassistenten.

Nun , da eCobertura installiert ist, starten Sie Eclipse und die Abdeckung der Session - Ansicht unter zeigen Fenster → Ansicht anzeigen → Andere → Cobertura .

3.2. Verwenden von Eclipse Kepler oder höher

Bei der neueren Version von Eclipse (Kepler, Luna usw.) kann die Installation von eCobertura einige Probleme im Zusammenhang mit JUnit verursachen. Die neuere Version von JUnit, die mit Eclipse gepackt ist , ist nicht vollständig mit dem Abhängigkeitsprüfer von eCobertura kompatibel :

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]

Um dieses Problem zu umgehen, können Sie eine ältere Version von JUnit herunterladen und im Ordner der Eclipse-Plugins ablegen.

Dies kann erreicht werden, indem Sie den Ordner org.junit. *** aus % ECLIPSE_HOME% / plugins löschen und dann denselben Ordner aus einer älteren Eclipse-Installation kopieren, die mit eCobertura kompatibel ist .

Ist das erledigt, starten Sie den Eclipse - IDE und installieren Sie das Plugin die entsprechende Update - Website.

3.3. Code-Coverage-Berichte in Eclipse

Um die Codeabdeckung durch einen Komponententest zu berechnen, klicken Sie mit der rechten Maustaste auf Ihr Projekt / Ihren Test, um das Kontextmenü zu öffnen, und wählen Sie dann die Option Abdeckung als → JUnit-Test .

In der Ansicht Coverage Session können Sie den Bericht zur Abdeckung von Leitungen / Zweigen pro Klasse überprüfen:

Java 8-Benutzer können bei der Berechnung der Codeabdeckung auf einen häufigen Fehler stoßen:

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

In diesem Fall beschwert sich Java über einige Methoden, die keine ordnungsgemäße Stapelzuordnung haben, da in neueren Java-Versionen eine strengere Bytecode-Überprüfung eingeführt wurde.

Dieses Problem kann behoben werden, indem die Überprüfung in der Java Virtual Machine deaktiviert wird.

Klicken Sie dazu mit der rechten Maustaste auf Ihr Projekt, um das Kontextmenü zu öffnen, wählen Sie Cover As aus und öffnen Sie die Ansicht Coverage Configurations . Fügen Sie auf der Registerkarte Argumente das Flag -noverify als VM-Argument hinzu. Klicken Sie abschließend auf die Schaltfläche Deckung, um die Deckungsberechnung zu starten.

Sie können auch das Flag -XX: -UseSplitVerifier verwenden , dies funktioniert jedoch nur mit Java 6 und 7, da der Split-Verifier in Java 8 nicht mehr unterstützt wird.

4. Fazit

In diesem Artikel haben wir kurz gezeigt, wie Cobertura zur Berechnung der Codeabdeckung in einem Java-Projekt verwendet wird. Wir haben auch die Schritte beschrieben, die zur Installation von eCobertura in Ihrer Eclipse-Umgebung erforderlich sind .

Cobertura ist ein großartiges, aber einfaches Tool zur Codeabdeckung, das jedoch nicht aktiv gewartet wird, da es derzeit von neueren und leistungsstärkeren Tools wie JaCoCo übertroffen wird.

Schließlich können Sie das in diesem Artikel bereitgestellte Beispiel im GitHub-Projekt überprüfen .