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?
fonte
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?
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:
Se o seu teste apenas exercita o
cond
ser verdadeiro e nunca executa oelse
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:
fonte
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.
fonte