Używam wtyczki Cobertura Maven do jednego z moich projektów. Ale mam pytanie odnośnie wygenerowanego raportu:
Jaka jest różnica między zasięgiem linii i oddziałów?
Używam wtyczki Cobertura Maven do jednego z moich projektów. Ale mam pytanie odnośnie wygenerowanego raportu:
Jaka jest różnica między zasięgiem linii i oddziałów?
Odpowiedzi:
Pokrycie linii mierzy liczbę wykonanych instrukcji (instrukcja jest zwykle linią kodu, bez komentarzy, warunków itp.). Pokrycia gałęzi sprawdza, czy dla każdego warunku (if, while, for) została wybrana gałąź true i false. Będziesz mieć dwa razy więcej gałęzi niż warunkowe.
Dlaczego się przejmujesz? Rozważmy przykład:
public int getNameLength(boolean isCoolUser) {
User user = null;
if (isCoolUser) {
user = new John();
}
return user.getName().length();
}
Jeśli wywołasz tę metodę z isCoolUser
ustawieniem na true
, uzyskasz 100% pokrycie instrukcji. Brzmi dobrze? NIE, będzie pusty wskaźnik, jeśli zadzwonisz z false
. Jednak w pierwszym przypadku masz 50% pokrycia gałęzi, więc możesz zobaczyć, że czegoś brakuje w twoich testach (i często w twoim kodzie).
Weź ten kod jako uproszczony przykład:
if(cond) {
line1();
line2();
line3();
line4();
} else {
line5();
}
Jeśli twój test sprawdza tylko cond
bycie prawdą i nigdy nie uruchamia else
gałęzi, to:
Również sam raport Cobertury wprowadza kilka fajnych wyskakujących podpowiedzi po kliknięciu nagłówka kolumny:
Pokrycie linii - procent linii wykonanych w tym przebiegu testowym.
Pokrycie gałęzi - procent gałęzi wykonanych w tym przebiegu testowym.
if(cond){
//branch 1
}else{
//branch 2
}
Musisz zaadresować wszystkie linie to gałąź 1 i gałąź 2, aby uzyskać 100% pokrycia zarówno dla LineCoverage, jak i BranchCoverage.
Jeśli w ogóle przegapisz cokolwiek innego, otrzymasz połowę zasięgu oddziału. Jeśli przegapiłeś cokolwiek w # linii w obu przypadkach, otrzymasz BranchCoverage w wysokości 100%, ale nie 100% z pokryciem linii.
Mam nadzieję że to pomoże.