JaCoCo Maven plugin
Pokrycie kodu testami z użyciem JaCoCo Maven plugin
JaCoCo Maven plugin to wtyczka która umożliwia wygenerowanie raportu z pokrycia kodu źródłowego testami. Na potrzeby tego artykułu wykorzystamy prostą aplikacje napisaną w Spring Boot weryfikując jej pokrycie (z ang. Test Coverage). Aplikacja znajduje się tutaj: https://github.com/mwarycha/JavaLeader.pl/tree/master/put-map-struct-jacoco
W pliku pom.xml znajduje się dołączony plugin jacoco z następującą konfiguracją:
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.7</version> <configuration> <excludes> <exclude>pl/javaleader/putmapstruct/model/*</exclude> <exclude>pl/javaleader/putmapstruct/PutMapStructApplication.class</exclude> </excludes> </configuration> <executions> <execution> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>report</id> <phase>prepare-package</phase> <goals> <goal>report</goal> </goals> </execution> <execution> <id>jacoco-check</id> <goals> <goal>check</goal> </goals> <configuration> <rules> <rule> <element>PACKAGE</element> <limits> <limit> <counter>LINE</counter> <value>COVEREDRATIO</value> <minimum>0.5</minimum> </limit> </limits> </rule> </rules> </configuration> </execution> </executions> </plugin>
- generowanie raportu odbędzie się w fazie prepare-package,
- build aplikacji nie przejdzie jeśli nie będzie spełnione minimum 50% pokrycia kodu testami dla każdej klasy za wyjątkiem klas użytych do testów.
Kiedy pokrycie kodu testami nie będzie spełnione wystąpi błąd podobny do zamieszczonego niżej:
Rule violated for package pl.javaleader.putmapstruct.controller: lines covered ratio is 0.07, but expected minimum is 0.50
Raport wykazał tylko 4% pokrycia kodu testami. Wygenerowany raport znajduje się w katalogu ./target/site/jacoco:
Poprawmy ten wynik dopisując testy jednostkowe aby uzyskać akceptowalny wynik pokrycia kodu testami:
Jacoco udostępnia następujące podstawowe metryki:
- Lines coverage – wskaźnik pokrycia linii kodu źródłowego testami (komentarze, elementy samego języka np. klamry są ignorowane),
- Branches coverage – wskaźnik wykorzystania i pokrycia instrukcji warunkowych,
- Cyclomatic complexity – złożoność cyklomatyczna (liczba niezależnych ścieżek w aplikacji).
Leave a comment