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?
źródło
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?
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:
Jeśli twój test sprawdza tylko
cond
bycie prawdą i nigdy nie uruchamiaelse
gałęzi, to:Również sam raport Cobertury wprowadza kilka fajnych wyskakujących podpowiedzi po kliknięciu nagłówka kolumny:
źródło
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.
źródło