Различия между линией и ветвью покрытия - PullRequest
82 голосов
/ 22 ноября 2011

Я использую плагин Cobertura Maven для одного из моих проектов.Но у меня есть вопрос о сгенерированном отчете:

В чем разница между линией и охватом филиала?

Ответы [ 3 ]

131 голосов
/ 22 ноября 2011

Строка покрытия показывает, сколько операторов вы взяли (оператор, как правило, представляет собой строку кода, не включая комментарии, условия и т. Д.).Покрытие ветвлений проверяет, приняли ли вы ветвь истина и ложь для каждого условия (если, в то время, для).У вас будет в два раза больше веток, чем у условных.

Почему вас это волнует?Рассмотрим пример:

public int getNameLength(boolean isCoolUser) {
    User user = null;
    if (isCoolUser) {
        user = new John(); 
    }
    return user.getName().length(); 
}

Если вы вызовете этот метод с isCoolUser, установленным на true, вы получите 100% покрытие заявления.Звучит хорошо?Нет, при вызове false будет нулевой указатель.Тем не менее, в первом случае у вас есть 50% охват ветвления, поэтому вы можете увидеть, что чего-то не хватает в вашем тестировании (и часто в вашем коде).

55 голосов
/ 22 ноября 2011

Возьмем этот код в качестве упрощенного примера:

if(cond) {
    line1();
    line2();
    line3();
    line4();
} else {
    line5();
}

Если ваш тест только показывает, что cond соответствует действительности, и никогда не запускает ветвь else, у вас есть:

  • 4 из 5 покрытых строк
  • 1 из 2 покрытых ветвей

Также в отчете Cobertura представлены некоторые приятные всплывающие подсказки, когда заголовок столбцанажал:

Покрытие линии - процент строк, выполненных этим тестовым прогоном.

Покрытие ветви - Процент выполненных ветвейэтим тестом.

2 голосов
/ 19 апреля 2013
if(cond){
    //branch 1
}else{  
    //branch 2
}

Вам необходимо обратиться ко всем линиям ветви 1 и ветви 2, чтобы получить 100% покрытие как для LineCoverage, так и для BranchCoverage.

Если вы вообще что-то упустили, вы получите половину покрытия филиала.Если вы пропустили что-либо в числе строк в обоих случаях, вы получите BranchCoverage в размере 100%, но не 100% при покрытии строки.

Надеюсь, это поможет.

...