Ich benutze das Cobertura Maven Plugin für eines meiner Projekte. Ich habe jedoch eine Frage zum generierten Bericht:
Was ist der Unterschied zwischen Leitungs- und Nebenstellenabdeckung?
Ich benutze das Cobertura Maven Plugin für eines meiner Projekte. Ich habe jedoch eine Frage zum generierten Bericht:
Was ist der Unterschied zwischen Leitungs- und Nebenstellenabdeckung?
Antworten:
Die Zeilenabdeckung misst, wie viele Anweisungen Sie gemacht haben (eine Anweisung ist normalerweise eine Codezeile ohne Kommentare, Bedingungen usw.). Die Zweigabdeckung prüft, ob Sie für jede Bedingung den richtigen und den falschen Zweig genommen haben (wenn, während, für). Sie haben doppelt so viele Zweige wie Bedingungen.
Warum kümmert es dich? Betrachten Sie das Beispiel:
public int getNameLength(boolean isCoolUser) {
User user = null;
if (isCoolUser) {
user = new John();
}
return user.getName().length();
}
Wenn Sie diese Methode mit isCoolUser
set to aufrufen true
, erhalten Sie eine 100% ige Anweisungsabdeckung. Klingt gut? NOPE, es wird einen Nullzeiger geben, wenn Sie mit anrufen false
. Im ersten Fall haben Sie jedoch eine Zweigstellenabdeckung von 50%, sodass Sie feststellen können, dass bei Ihren Tests (und häufig auch in Ihrem Code) etwas fehlt.
Nehmen Sie diesen Code als vereinfachtes Beispiel:
if(cond) {
line1();
line2();
line3();
line4();
} else {
line5();
}
Wenn Ihr Test nur das cond
Wahre wahr macht und niemals den else
Zweig ausführt, den Sie haben:
Außerdem enthält der Cobertura- Bericht selbst einige nette QuickInfos zur Popup-Hilfe, wenn auf die Spaltenüberschrift geklickt wird:
Linienabdeckung - Der Prozentsatz der Linien, die von diesem Testlauf ausgeführt werden.
Zweigabdeckung - Der Prozentsatz der von diesem Testlauf ausgeführten Zweige.
if(cond){
//branch 1
}else{
//branch 2
}
Sie müssen alle Leitungen in Zweig 1 und Zweig 2 adressieren, um eine 100% ige Abdeckung für LineCoverage und BranchCoverage zu erhalten.
Wenn Sie etwas anderes verpassen, erhalten Sie die Hälfte der Filialabdeckung. Wenn Sie in if und else in der Anzahl der Zeilen etwas verpasst haben, erhalten Sie eine BranchCoverage von 100%, jedoch nicht 100% mit Leitungsabdeckung.
Hoffe das hilft.