Einführung in Cobertura
1. Überblick
In diesem Artikel werden verschiedene Aspekte vongenerating code coverage reports using Cobertura demonstriert.
Einfach ausgedrückt, Cobertura ist ein Berichterstellungstool, das die Testabdeckung für eine Codebasis berechnet - den Prozentsatz der Zweige / Leitungen, 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 Siedeclare the Cobertura Maven plugin in your pom.xml file im Berichtsabschnitt eingeben:
org.codehaus.mojo
cobertura-maven-plugin
2.7
Sie können immer die neueste Version des Plugins inMaven central repository überprüfen.
Sobald Sie fertig sind, führen Sie Maven aus und geben Siecobertura:cobertura als Ziel an.
Dadurch wird ein detaillierter Bericht im HTML-Stil erstellt, der Statistiken zur Codeabdeckung enthält, die über die Codeinstrumentierung erfasst wurden:
The line coverage metric shows how many statements are executed in den Unit Tests laufen, währendthe branch coverage metric focuses on how many branches are covered by those tests.
Für jede Bedingung haben Sie zwei Zweige. Im Grunde haben Sie also doppelt so viele Zweige wie Bedingungen.
The complexity factor reflects the complexity of the code - steigt an, wenn die Anzahl der Zweige im Code zunimmt.
Je mehr Zweige Sie haben, desto mehr Tests müssen Sie theoretisch implementieren, um die Zweigabdeckungsbewertung zu verbessern.
2.2. Konfigurieren der Berechnung und Überprüfung der Codeabdeckung
Sie können einen bestimmten Satz von Klassen mit den Tagsignore undexclude ignorieren / von der Code-Instrumentierung ausschließen:
org.codehaus.mojo
cobertura-maven-plugin
2.7
com/example/algorithms/dijkstra/*
com/example/algorithms/dijkstra/*
Nach der Berechnung der Codeabdeckung folgt diecheck-Phase. The check phase ensures that a certain level of code coverage is reached.
Hier ist ein grundlegendes Beispiel für die Konfiguration dercheck-Phase:
true
75
85
75
85
75
85
com.example.algorithms.dijkstra.*
60
50
Bei Verwendung deshaltOnFailure-Flags führt Cobertura dazu, dass der Build fehlschlägt, wenn eine der angegebenen Prüfungen fehlschlägt.
DiebranchRate/lineRate-Tags geben die nach der Code-Instrumentierung erforderliche Mindestanzahl für die Abdeckung von Zweigen / Leitungen an. Diese Prüfungen können mit den TagspackageLineRate/packageBranchRateauf Paketebene erweitert werden.
Es ist auch möglich, bestimmte Regelprüfungen für Klassen mit Namen zu deklarieren, die einem bestimmten Muster folgen, indem das Tagregexverwendet wird. Im obigen Beispiel stellen wir sicher, dass für Klassen im Paketcom.example.algorithms.dijkstraund darunter eine bestimmte Bewertung der Leitungs- / Zweigabdeckung erreicht werden muss.
3. Eclipse Plugin
3.1. Installation
Cobertura ist auch als Eclipse-Plugin namenseCobertura verfügbar. UmeCobertura für Eclipse zu installieren, müssen Sie die folgenden Schritte ausführen und Eclipse Version 3.5 oder höher installieren:
Step 1: Wählen Sie im Eclipse-MenüHelp →Install New Software. Geben Sie dann beiwork with im Feldhttp://ecobertura.johoop.de/update/ ein:
Step 2: Wählen SieeCobertura Code Coverage aus, klicken Sie auf „Weiter“ und befolgen Sie die Schritte im Installationsassistenten.
NachdemeCobertura installiert ist, starten Sie Eclipse neu und zeigen Sie die Ansicht der Abdeckungssitzung unterWindows → Show View → Other → Cobertura an.
3.2. Verwenden von Eclipse Kepler oder höher
Bei der neueren Version von Eclipse (Kepler, Luna usw.) kann die Installation voneCobertura einige Probleme im Zusammenhang mit JUnit -the newer version of JUnit packaged with Eclipse is not fully compatible with eCobertura‘s dependencies checker: verursachen
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 der Ordnerorg.junit.*** aus%ECLIPSE_HOME%/plugins gelöscht und dann derselbe Ordner aus einer älteren Eclipse-Installation kopiert wird, die miteCobertura kompatibel ist.
Sobald dies erledigt ist, verwendetrestart your Eclipse IDE and re-install the plugindie entsprechende Update-Site.
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 OptionCover As → JUnit Test.
In der AnsichtCoverage Sessionkönnen Sie den Bericht zur Leitungs- / Zweigabdeckung 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 aufgrund der in neueren Java-Versionen eingeführten strengeren Bytecode-Überprüfung keine ordnungsgemäße Stapelzuordnung haben.
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 SieCover As aus und öffnen Sie dann die AnsichtCoverage Configurations. Fügen Sie auf der Registerkarte Argumente das Flag-noverifyals VM-Argument hinzu. Klicken Sie abschließend auf die Schaltflächecoverage, 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-Verifizierer in Java 8 nicht mehr unterstützt wird.
4. Fazit
In diesem Artikel haben wir kurz gezeigt, wie Cobertura zum Berechnen der Codeabdeckung in einem Java-Projekt verwendet wird. Wir haben auch die Schritte beschrieben, die zum Installieren voneCobertura 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 wieJaCoCo übertroffen wird.
Schließlich können Sie das in diesem Artikel bereitgestellte Beispiel inGitHub project überprüfen.