Utilizo el complemento Cobertura Maven para uno de mis proyectos. Pero tengo una pregunta sobre el informe generado:
¿Cuál es la diferencia entre cobertura de línea y sucursal?
Utilizo el complemento Cobertura Maven para uno de mis proyectos. Pero tengo una pregunta sobre el informe generado:
¿Cuál es la diferencia entre cobertura de línea y sucursal?
Respuestas:
La cobertura de línea mide la cantidad de declaraciones que tomó (una declaración suele ser una línea de código, sin incluir comentarios, condicionales, etc.). Las coberturas de rama verifican si tomó la rama verdadero y falso para cada condicional (si, mientras, para). Tendrás el doble de ramas que condicionales.
¿Por qué te importa? Considere el ejemplo:
public int getNameLength(boolean isCoolUser) {
User user = null;
if (isCoolUser) {
user = new John();
}
return user.getName().length();
}
Si llama a este método con isCoolUser
establecido en true
, obtiene una cobertura del estado de cuenta del 100%. ¿Suena bien? NOPE, habrá un puntero nulo si llama con false
. Sin embargo, tiene una cobertura de sucursales del 50% en el primer caso, por lo que puede ver que falta algo en sus pruebas (y, a menudo, en su código).
Tome este código como un ejemplo simplificado:
if(cond) {
line1();
line2();
line3();
line4();
} else {
line5();
}
Si su prueba solo ejercita el cond
ser verdadero y nunca ejecuta la else
rama, tiene:
Además, el informe de Cobertura en sí mismo presenta algunas sugerencias interesantes de ayuda emergente cuando se hace clic en el encabezado de la columna:
Cobertura de línea : el porcentaje de líneas ejecutadas por esta ejecución de prueba.
Cobertura de sucursales : el porcentaje de sucursales ejecutadas por esta ejecución de prueba.
if(cond){
//branch 1
}else{
//branch 2
}
Debe abordar todas las líneas de la sucursal 1 y la sucursal 2 para obtener una cobertura del 100% tanto para LineCoverage como para BranchCoverage.
Si pierde algo en lo demás, obtendrá la mitad de la cobertura de la sucursal. Si ha omitido algo en el número de líneas tanto en el caso como en el resto, obtendrá una cobertura de sucursal del 100% pero no del 100% con la cobertura de la línea.
Espero que esto ayude.