Я використовую плагін 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.
Якщо ви взагалі щось пропустите, ви отримаєте половину покриття філій. Якщо ви пропустили що-небудь у # рядках і в тому, і в іншому випадку, ви отримаєте BranchCoverage 100%, але не 100% з покриттям ліній.
Сподіваюся, це допомагає.