2011-11-22 6 views

Respuesta

105

La cobertura de línea mide la cantidad de declaraciones que tomó (una instrucción es generalmente una línea de código, sin incluir comentarios, condicionales, etc.). Coberturas de sucursal comprueba si tomó la rama verdadera y falsa 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 se llama a este método con isCoolUser conjunto de true, se obtiene la cobertura de declaración de 100%. ¿Suena bien? NOPE, habrá un puntero nulo si llama con false. Sin embargo, tiene un 50% de cobertura de sucursal en el primer caso, por lo que puede ver que falta algo en su prueba (y, a menudo, en su código).

+4

¡Gran respuesta! ¡Muestra cuando la cobertura de línea da la falsa sensación de tener un buen código! – MAGx2

45

Tome este código como un ejemplo simplificado:

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

Si su prueba sólo ejerce la cond ser fiel y nunca se ejecuta la rama else tiene:

  • 4 de 5 líneas cubiertas
  • 1 de 2 sucursales cubiertas

También en sí Cobertura report introduce algunas buenas sobre herramientas de ayuda emergente cuando se hace clic en encabezado de la columna:

de cobertura de línea - El porcentaje de líneas ejecutadas por esta prueba.

Sucursal Cobertura - El porcentaje de sucursales ejecutadas por esta ejecución de prueba.

+1

¡Esta es también una excelente respuesta! Simple y claro! – Bowen

1
if(cond){ 
    //branch 1 
}else{ 
    //branch 2 
} 

Es necesario para hacer frente a todas las líneas es la rama y la rama 1 2 para obtener una cobertura del 100% tanto para LineCoverage y BranchCoverage.

Si nada se pierda nada de lo demás, obtendrá la mitad de la cobertura de sucursales. Si ha omitido algo en # líneas tanto en if como en otra opción, obtendrá BranchCoverage del 100% pero no del 100% con cobertura de línea.

Espero que esto ayude.

Cuestiones relacionadas