Úvod do Cobertury

1. Prehľad

V tomto článku si ukážeme niekoľko aspektov generovanie správ o pokrytí kódu pomocou Cobertura.

Zjednodušene povedané, Cobertura je reportovací nástroj, ktorý počíta pokrytie testu pre základ kódu - percento pobočiek / liniek, ku ktorým pristupujú jednotkové testy v projekte Java.

2. Doplnok Maven

2.1. Konfigurácia Maven

Ak chcete vo svojom projekte Java začať počítať pokrytie kódom, musíte deklarujte doplnok Cobertura Maven vo svojom pom.xml spis v časti venovanej hláseniu:

   org.codehaus.mojo cobertura-maven-plugin 2.7 

Najnovšiu verziu doplnku môžete kedykoľvek skontrolovať v centrálnom úložisku Maven.

Po dokončení pokračujte a spustite Maven so špecifikáciou cobertura: cobertura ako cieľ.

Takto sa vytvorí podrobná správa o štýle HTML, ktorá zobrazuje štatistické údaje o pokrytí kódu zhromaždené pomocou prístroja na kódovanie:

Metrika pokrytia čiary ukazuje, koľko príkazov sa vykoná v jednotkových testoch, zatiaľ čo metrika pokrytia pobočiek sa zameriava na to, koľko vetiev tieto testy pokrývajú.

Pre každú podmienenú máte dve vetvy, takže v zásade budete mať dvakrát toľko vetiev ako podmienené.

Faktor zložitosti odráža zložitosť kódu - stúpa, keď sa zvyšuje počet vetiev v kóde.

Teoreticky platí, že čím viac pobočiek máte, tým viac testov musíte vykonať, aby ste zvýšili skóre pokrytia pobočiek.

2.2. Konfigurácia výpočtu a kontrol pokrytia kódu

Môžete ignorovať / vylúčiť konkrétnu skupinu tried z prístrojového vybavenia kódu pomocou ignorovať a vylúčiť tagy:

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

Po výpočte pokrytia kódom prichádza skontrolovať fáza. The skontrolovať fáza zaisťuje dosiahnutie určitej úrovne pokrytia kódom.

Tu je základný príklad konfigurácie súboru skontrolovať fáza:

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

Pri použití haltOnFailure vlajka, Cobertura spôsobí zlyhanie zostavenia, ak niektorá zo špecifikovaných kontrol zlyhá.

The branchRate / lineRate Značky určujú minimálne prijateľné skóre pokrytia vetvy / linky požadované po vybavení prístroja. Tieto kontroly je možné rozšíriť na úroveň balíka pomocou packageLineRate / packageBranchRate značky.

Je tiež možné deklarovať kontroly konkrétnych pravidiel pre triedy s názvami podľa konkrétneho vzoru pomocou znaku regulárny výraz značka. Vo vyššie uvedenom príklade zaisťujeme, že pre triedy v triede musí byť dosiahnuté konkrétne skóre pokrytia linky / pobočky com.baeldung.algorithms.dijkstra balíček a nižšie.

3. Doplnok Eclipse

3.1. Inštalácia

Cobertura je k dispozícii aj ako doplnok Eclipse s názvom eCobertura. Za účelom inštalácie eCobertura pre Eclipse musíte postupovať podľa nasledujúcich pokynov a mať nainštalovanú Eclipse verzie 3.5 alebo vyššej:

Krok 1: V ponuke Eclipse vyberte možnosť PomocNainštalujte nový softvér. Potom na pracovať s do poľa zadajte //ecobertura.johoop.de/update/:

Krok 2: Vyberte Pokrytie kódu eCobertura, kliknite na tlačidlo „Ďalej“ a potom postupujte podľa pokynov v sprievodcovi inštaláciou.

Teraz eCobertura je nainštalovaný, reštartujte Eclipse a zobrazte zobrazenie relácie pokrytia pod Windows → Zobraziť pohľad → Iné → Cobertura.

3.2. Pomocou Eclipse Kepler alebo novšej verzie

Pre novšiu verziu Eclipse (Kepler, Luna atď.), Inštalácia eCobertura môže spôsobiť určité problémy spojené s JUnit - novšia verzia JUnit zabalená s Eclipse nie je úplne kompatibilná s eCoberturaKontrola závislostí:

Inštaláciu nie je možné dokončiť, pretože sa nepodarilo nájsť jednu alebo viac požadovaných položiek. Inštalovaný softvér: eCobertura 0.9.8.201007202152 (ecobertura.feature.group 0.9.8.201007202152) Chýbajúca požiadavka: eCobertura UI 0.9.8.201007202152 (ecobertura.ui 0.9.8.201007202152) vyžaduje „zväzok org.junit4 0.0.0“, ale nebol nájdený Nie je možné uspokojiť závislosť: Od: eCobertura 0.9.8.201007202152 (ecobertura.feature.group 0.9.8.201007202152) Komu: ecobertura.ui [0.9.8.201007202152]

Ako náhradné riešenie si môžete stiahnuť staršiu verziu JUnit a umiestniť ju do priečinka doplnkov Eclipse.

To je možné vykonať odstránením priečinka org.junit. *** od % ECLIPSE_HOME% / doplnkya potom skopírujete rovnaký priečinok zo staršej inštalácie Eclipse, ktorá je kompatibilná s eCobertura.

Po dokončení reštartujte svoje Eclipse IDE a znovu nainštalujte doplnok pomocou zodpovedajúcej stránky s aktualizáciami.

3.3. Správy o pokrytí kódu v Eclipse

Ak chcete vypočítať pokrytie kódu testom jednotky, kliknite pravým tlačidlom myši na projekt / test, aby ste otvorili kontextovú ponuku, a potom vyberte príslušnú možnosť Cover As → JUnit Test.

Pod Relácia na pokrytie pohľad, môžete skontrolovať správu o pokrytí liniek / pobočiek podľa tried:

Používatelia Java 8 sa môžu pri výpočte pokrytia kódom stretnúť s bežnou chybou:

java.lang.VerifyError: Očakáva sa rámec stackmap na cieľ pobočky ...

V tomto prípade sa Java sťažuje na to, že niektoré metódy nemajú správnu mapu zásobníka, a to kvôli prísnejšiemu overovaču bytecode zavedenému v novších verziách Java.

Tento problém je možné vyriešiť vypnutím overenia vo virtuálnom stroji Java.

Ak to chcete urobiť, kliknite pravým tlačidlom myši na projekt a otvorte kontextové menu, vyberte Obal akoa potom otvorte Konfigurácie pokrytia vyhliadka. Na karte argumenty pridajte znak -zmeniť príznak ako argument VM. Nakoniec kliknite na ikonu pokrytie tlačidlo na spustenie výpočtu pokrytia.

Môžete tiež použiť vlajku -XX: -UseSplitVerifier, ale toto funguje iba s Java 6 a 7, pretože overovač rozdelenia už v Java 8 nie je podporovaný.

4. Záver

V tomto článku sme si stručne ukázali, ako používať program Cobertura na výpočet pokrytia kódom v projekte Java. Popísali sme tiež kroky potrebné na inštaláciu eCobertura vo vašom prostredí Eclipse.

Cobertura je skvelý, ale jednoduchý nástroj na pokrytie kódu, ktorý sa však aktívne neudržuje, pretože ho v súčasnosti prekonávajú novšie a výkonnejšie nástroje, ako je JaCoCo.

Na záver si môžete pozrieť príklad uvedený v tomto článku v dokumente Projekt GitHub.


$config[zx-auto] not found$config[zx-overlay] not found