Я использую плагин Cobertura Maven для одного из своих проектов. Но у меня вопрос по сформированному отчету:
В чем разница между покрытием линии и филиала?
Я использую плагин Cobertura Maven для одного из своих проектов. Но у меня вопрос по сформированному отчету:
В чем разница между покрытием линии и филиала?
Ответы:
Покрытие строк измеряет, сколько операторов вы приняли (оператор обычно представляет собой строку кода, не включая комментарии, условия и т. Д.). Покрытие ветвей проверяет, выбрали ли вы истинную и ложную ветвь для каждого условного выражения (если, пока, для). У вас будет вдвое больше веток, чем условных.
Почему тебя это волнует? Рассмотрим пример:
public int getNameLength(boolean isCoolUser) {
User user = null;
if (isCoolUser) {
user = new John();
}
return user.getName().length();
}
Если вы вызовете этот метод с isCoolUser
установленным значением true
, вы получите 100% покрытие оператора. Звучит неплохо? NOPE, если вы вызовете с помощью false
. Однако в первом случае у вас есть 50% -ное покрытие веток, поэтому вы можете видеть, что в вашем тестировании (а часто и в вашем коде) чего-то не хватает.
Рассмотрим этот код в качестве упрощенного примера:
if(cond) {
line1();
line2();
line3();
line4();
} else {
line5();
}
Если ваш тест проверяет только cond
истинность и никогда не запускает else
имеющуюся у вас ветку:
Кроме того, в самом отчете Cobertura есть несколько хороших всплывающих подсказок при нажатии заголовка столбца:
Покрытие строк - процент строк, выполненных в этом тестовом прогоне.
Охват ветвей - процент ветвей, выполненных этим тестовым запуском.
if(cond){
//branch 1
}else{
//branch 2
}
Вам необходимо адресовать все линии - ветвь 1 и ветвь 2, чтобы получить 100% покрытие как для LineCoverage, так и для BranchCoverage.
Если вы вообще что-то пропустите, вы получите половину покрытия филиала. Если вы пропустили что-либо в # строках как в if, так и в else, вы получите 100% BranchCoverage, но не 100% с покрытием строки.
Надеюсь это поможет.