Inleiding tot Cobertura

1. Overzicht

In dit artikel zullen we verschillende aspecten van het genereren van codedekkingsrapporten met Cobertura.

Simpel gezegd, Cobertura is een rapportagetool die de testdekking berekent voor een codebase - het percentage vertakkingen / lijnen waartoe unit-tests in een Java-project toegang hebben.

2. Maven-plug-in

2.1. Maven-configuratie

Om codedekking in uw Java-project te kunnen berekenen, moet u declareer de Cobertura Maven-plug-in in uw pom.xml het dossier onder de rapporteringssectie:

   org.codehaus.mojo cobertura-maven-plugin 2.7 

U kunt altijd de laatste versie van de plug-in bekijken in de centrale opslagplaats van Maven.

Als je klaar bent, ga je gang en voer je Maven specificeren uit cobertura: cobertura als doel.

Hiermee wordt een gedetailleerd HTML-stijlrapport gemaakt met statistieken over codedekking die zijn verzameld via code-instrumentatie:

De metriek voor lijndekking geeft aan hoeveel instructies worden uitgevoerd in de Unit Tests die worden uitgevoerd, terwijl de metriek voor filiaaldekking richt zich op het aantal filialen dat door die tests wordt gedekt.

Voor elke conditionele heb je twee branches, dus in feite heb je twee keer zoveel branches als conditionals.

De complexiteitsfactor weerspiegelt de complexiteit van de code - het gaat omhoog als het aantal vertakkingen in de code toeneemt.

In theorie geldt dat hoe meer branches u heeft, hoe meer tests u moet uitvoeren om de score voor branchedekking te verhogen.

2.2. Berekening en controles van codedekking configureren

U kunt een specifieke set klassen negeren / uitsluiten van code-instrumentatie met behulp van de negeren en de uitsluiten tags:

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

Na het berekenen van de codedekking komt het controleren fase. De controleren fase zorgt ervoor dat een bepaald niveau van codedekking wordt bereikt.

Hier is een eenvoudig voorbeeld van hoe u het controleren fase:

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

Bij gebruik van de haltOnFailure vlag, zal Cobertura ervoor zorgen dat de build mislukt als een van de gespecificeerde controles mislukt.

De branchRate / lineRate tags specificeren de minimaal acceptabele score voor tak / lijndekking die vereist is na code-instrumentatie. Deze controles kunnen worden uitgebreid naar het pakketniveau met behulp van de packageLineRate / packageBranchRate tags.

Het is ook mogelijk om specifieke regelcontroles te declareren voor klassen met namen die een specifiek patroon volgen door de regex label. In het bovenstaande voorbeeld zorgen we ervoor dat een specifieke lijn- / filiaaldekkingsscore moet worden behaald voor klassen in de com.baeldung.algorithms.dijkstra pakket en hieronder.

3. Eclipse-plug-in

3.1. Installatie

Cobertura is ook beschikbaar als een Eclipse-plug-in genaamd eCobertura. Om te installeren eCobertura voor Eclipse moet u de onderstaande stappen volgen en Eclipse versie 3.5 of hoger hebben geïnstalleerd:

Stap 1: Selecteer in het Eclipse-menu HelpenInstalleer nieuwe software. Vervolgens bij de werk met het veld, voer in //ecobertura.johoop.de/update/:

Stap 2: Selecteer eCobertura-codedekking, klik op “volgende” en volg de stappen in de installatiewizard.

Dat eCobertura is geïnstalleerd, start Eclipse opnieuw en toon de weergave van de dekkingssessie onder Windows → Show View → Other → Cobertura.

3.2. Met Eclipse Kepler of hoger

Voor de nieuwere versie van Eclipse (Kepler, Luna, etc.), de installatie van eCobertura kan enkele problemen veroorzaken met betrekking tot JUnit - de nieuwere versie van JUnit verpakt met Eclipse is niet volledig compatibel met eCoberturaControle van afhankelijkheden:

De installatie kan niet worden voltooid omdat een of meer vereiste items niet zijn gevonden. Software die wordt geïnstalleerd: eCobertura 0.9.8.201007202152 (ecobertura.feature.group 0.9.8.201007202152) Ontbrekende vereiste: eCobertura UI 0.9.8.201007202152 (ecobertura.ui 0.9.8.201007202152) vereist 'bundle org.junit4 0.0.0' maar kan niet worden gevonden Kan niet voldoen aan afhankelijkheid: Van: eCobertura 0.9.8.201007202152 (ecobertura.feature.group 0.9.8.201007202152) Aan: ecobertura.ui [0.9.8.201007202152]

Als tijdelijke oplossing kunt u een oudere versie JUnit downloaden en deze in de map Eclipse-plug-ins plaatsen.

Dit kan gedaan worden door de map te verwijderen org.junit. *** van % ECLIPSE_HOME% / plug-ins, en vervolgens dezelfde map kopiëren van een oudere Eclipse-installatie die compatibel is met eCobertura.

Eenmaal gedaan, herstart je Eclipse IDE en installeer de plug-in opnieuw met behulp van de bijbehorende update-site.

3.3. Codedekkingsrapporten in Eclipse

Om de codedekking door een unit-test te berekenen, klikt u met de rechtermuisknop op uw project / test om het contextmenu te openen en kiest u vervolgens de optie Omslag als → JUnit-test.

Onder de Dekkingssessie bekijken, kunt u het dekkingsrapport van de lijn / filiaal per klas bekijken:

Gebruikers van Java 8 kunnen een veelvoorkomende fout tegenkomen bij het berekenen van de codedekking:

java.lang.VerifyError: verwacht een stackmap-frame op vertakkingsdoel ...

In dit geval klaagt Java over sommige methoden die geen goede stack-map hebben, vanwege de striktere bytecode-verificator die in nieuwere versies van Java is geïntroduceerd.

Dit probleem kan worden opgelost door verificatie uit te schakelen in de Java Virtual Machine.

Klik hiervoor met de rechtermuisknop op uw project om het contextmenu te openen en selecteer Omslag alsen open vervolgens het Dekkingsconfiguraties visie. Voeg op het tabblad argumenten de -noverify vlag als een VM-argument. Klik ten slotte op het Dekking knop om de dekkingsberekening te starten.

U kunt ook de vlag gebruiken -XX: -UseSplitVerifier, maar dit werkt alleen met Java 6 en 7, aangezien de split verifier niet langer wordt ondersteund in Java 8.

4. Conclusie

In dit artikel hebben we kort laten zien hoe u Cobertura kunt gebruiken om codedekking in een Java-project te berekenen. We hebben ook de stappen beschreven die nodig zijn om te installeren eCobertura in uw Eclipse-omgeving.

Cobertura is een geweldige maar eenvoudige tool voor codedekking, maar wordt niet actief onderhouden, aangezien het momenteel wordt overtroffen door nieuwere en krachtigere tools zoals JaCoCo.

Ten slotte kunt u het voorbeeld in dit artikel in het GitHub-project.