Introduktion til Cobertura

1. Oversigt

I denne artikel vil vi demonstrere flere aspekter af generere kodedækningsrapporter ved hjælp af Cobertura.

Kort sagt, Cobertura er et rapporteringsværktøj, der beregner testdækning for en codebase - procentdelen af ​​grene / linjer, der er adgang til ved enhedstest i et Java-projekt.

2. Maven-plugin

2.1. Maven-konfiguration

For at begynde at beregne kodedækning i dit Java-projekt skal du erklære Cobertura Maven plugin i din pom.xml fil under rapporteringsafsnittet:

   org.codehaus.mojo cobertura-maven-plugin 2.7 

Du kan altid kontrollere den nyeste version af plugin'et i Maven central repository.

Når du er færdig, skal du køre Maven og angive cobertura: cobertura som et mål.

Dette opretter en detaljeret HTML-stilrapport, der viser kodedækningsstatistikker indsamlet via kodeinstrumentering:

Linjedækningsmetricen viser, hvor mange udsagn der udføres i enhedstestkørslen, mens filialdækningsmålingen fokuserer på, hvor mange grene der er dækket af disse tests.

For hver betinget har du to grene, så dybest set vil du ende med at have dobbelt så mange grene som betingede.

Kompleksitetsfaktoren afspejler kodens kompleksitet - det stiger, når antallet af filialer i kode stiger.

I teorien, jo flere grene du har, jo flere tests skal du implementere for at øge filialdækningsresultatet.

2.2. Konfiguration af kodedækningsberegning og kontrol

Du kan ignorere / ekskludere et specifikt sæt klasser fra kodeinstrumentering ved hjælp af ignorere og udelukke tags:

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

Efter beregning af kodedækningen kommer kontrollere fase. Det kontrollere fase sikrer, at et bestemt niveau af kodedækning nås.

Her er et grundlæggende eksempel på, hvordan du konfigurerer kontrollere fase:

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

Når du bruger haltOnFailure flag, vil Cobertura få build til at mislykkes, hvis en af ​​de angivne kontroller mislykkes.

Det branchRate / lineRate tags specificerer den minimumsaccept, der kræves efter gren / liniedækning efter kodeinstrumentering. Disse kontroller kan udvides til pakkeniveau ved hjælp af packageLineRate / packageBranchRate tags.

Det er også muligt at erklære specifikke kontrol af klasser med navne efter et bestemt mønster ved hjælp af regex tag. I eksemplet ovenfor sikrer vi, at en bestemt linje / grenafdækning skal nås for klasser i com.baeldung.algorithms.dijkstra pakke og derunder.

3. Eclipse-plugin

3.1. Installation

Cobertura er også tilgængelig som et Eclipse-plugin kaldet eCobertura. For at installere eCobertura for Eclipse skal du følge nedenstående trin og have Eclipse version 3.5 eller nyere installeret:

Trin 1: Fra menuen Eclipse skal du vælge HjælpInstaller ny software. Derefter ved arbejde med feltet, indtast //ecobertura.johoop.de/update/:

Trin 2: Vælg eCobertura-kodedækning, klik på “næste”, og følg derefter trinene i installationsguiden.

Nu det eCobertura er installeret, genstart Eclipse og vis visningen af ​​dækningssessionen under Windows → Vis visning → Andet → Cobertura.

3.2. Brug af Eclipse Kepler eller senere

For den nyere version af Eclipse (Kepler, Luna osv.) Skal installationen af eCobertura kan forårsage nogle problemer relateret til JUnit - den nyere version af JUnit pakket med Eclipse er ikke fuldt kompatibel med eCobertura'S afhængighedskontrol:

Kan ikke gennemføre installationen, fordi et eller flere krævede emner ikke blev fundet. Software, der installeres: eCobertura 0.9.8.201007202152 (ecobertura.feature.group 0.9.8.201007202152) Manglende krav: eCobertura UI 0.9.8.201007202152 (ecobertura.ui 0.9.8.201007202152) kræver 'bundle org.junit4 0.0.0', men den kunne ikke findes Kan ikke tilfredsstille afhængighed: Fra: eCobertura 0.9.8.201007202152 (ecobertura.feature.group 0.9.8.201007202152) Til: ecobertura.ui [0.9.8.201007202152]

Som en løsning kan du downloade en ældre version af JUnit og placere den i mappen Eclipse-plugins.

Dette kan gøres ved at slette mappen org.junit. *** fra % ECLIPSE_HOME% / pluginsog derefter kopiere den samme mappe fra en ældre Eclipse-installation, der er kompatibel med eCobertura.

Når du er færdig, genstart din Eclipse IDE og geninstaller pluginet ved hjælp af det tilsvarende opdateringswebsted.

3.3. Rapporter om kodedækning i formørkelse

For at beregne kodedækning ved hjælp af en enhedstest skal du højreklikke på dit projekt / test for at åbne genvejsmenuen og derefter vælge indstillingen Cover As → JUnit Test.

Under Dækningssession se, kan du tjekke linje- / filialdækningsrapporten pr. klasse:

Java 8-brugere kan støde på en almindelig fejl ved beregning af kodedækning:

java.lang.VerifyError: Forventer en stackmap-ramme ved grenmål ...

I dette tilfælde klager Java over, at nogle metoder ikke har et ordentligt stakkort på grund af den strengere bytecode-verifikator, der blev introduceret i nyere versioner af Java.

Dette problem kan løses ved at deaktivere verifikation på Java Virtual Machine.

For at gøre det skal du højreklikke på dit projekt for at åbne genvejsmenuen og vælge Dæk som, og åbn derefter Dækningskonfigurationer udsigt. Tilføj fanen Argumenter -underret flag som et VM-argument. Til sidst skal du klikke på dækning knap for at starte dækningsberegning.

Du kan også bruge flaget -XX: -UseSplitVerifier, men dette fungerer kun med Java 6 og 7, da splitverifikatoren ikke længere understøttes i Java 8.

4. Konklusion

I denne artikel har vi kort vist, hvordan man bruger Cobertura til at beregne kodedækning i et Java-projekt. Vi har også beskrevet de trin, der kræves for at installere eCobertura i dit Eclipse-miljø.

Cobertura er et fantastisk, men simpelt kodedækningsværktøj, men ikke aktivt vedligeholdt, da det i øjeblikket er klassificeret af nyere og mere kraftfulde værktøjer som JaCoCo.

Endelig kan du tjekke eksemplet i denne artikel i GitHub-projekt.