Eu uso o plugin Cobertura Maven para um de meus projetos. Mas tenho uma pergunta sobre o relatório gerado:
Qual é a diferença entre cobertura de linha e ramal?
Eu uso o plugin Cobertura Maven para um de meus projetos. Mas tenho uma pergunta sobre o relatório gerado:
Qual é a diferença entre cobertura de linha e ramal?
Respostas:
A cobertura de linha mede quantas instruções você tomou (uma instrução geralmente é uma linha de código, não incluindo comentários, condicionais, etc). A cobertura de ramificação verifica se você pegou a ramificação verdadeira e falsa para cada condicional (if, while, for). Você terá duas vezes mais ramificações do que condicionais.
Por quê você se importa? Considere o exemplo:
public int getNameLength(boolean isCoolUser) {
User user = null;
if (isCoolUser) {
user = new John();
}
return user.getName().length();
}
Se você chamar esse método com isCoolUser
definido como true
, terá 100% de cobertura de instrução. Parece bom? NOPE, haverá um ponteiro nulo se você chamar com false
. No entanto, você tem 50% de cobertura de branch no primeiro caso, então você pode ver que algo está faltando em seu teste (e freqüentemente, em seu código).
Considere este código como um exemplo simplificado:
if(cond) {
line1();
line2();
line3();
line4();
} else {
line5();
}
Se o seu teste apenas exercita o cond
ser verdadeiro e nunca executa o else
branch que você tem:
Além disso , o próprio relatório Cobertura apresenta algumas dicas úteis de ajuda pop-up quando o cabeçalho da coluna é clicado:
Cobertura de linha - A porcentagem de linhas executadas por esta execução de teste.
Cobertura de ramificações - A porcentagem de ramificações executadas por esta execução de teste.
if(cond){
//branch 1
}else{
//branch 2
}
Você precisa abordar todas as linhas no ramal 1 e no ramal 2 para obter 100% de cobertura para LineCoverage e BranchCoverage.
Se você perder alguma coisa em outra coisa, receberá metade da cobertura da agência. Se você perdeu alguma coisa em # de linhas em if e else, você obterá BranchCoverage de 100%, mas não 100% com cobertura de linha.
Espero que isto ajude.