101 votes

Différences entre la couverture des lignes et des branches

J'utilise le plugin Cobertura Maven pour l'un de mes projets. Mais j'ai une question sur le rapport généré:

Quelle est la différence entre une couverture de ligne et une couverture?

195voto

Kane Points 2099

La couverture en ligne que le nombre de déclarations que vous avez pris (une instruction est généralement une ligne de code, pas y compris les commentaires, les conditions, etc). Direction des couvertures vérifie si vous avez pris le vrai et le faux branche pour chaque conditionnelles (if, while, for). Vous aurez deux fois autant de branches que des instructions conditionnelles.

Pourquoi s'en faire? Prenons l'exemple:

    public int getNameLength(boolean isCoolUser) {
    User user = null;
    if (isCoolUser) {
        user = new John(); 
    }
    return user.getName().length(); 
}

Si vous appelez cette méthode avec isCoolUser ensemble de true, vous obtenez 100% l'état de la couverture. Ça sonne bien? NOPE, il va être un pointeur null si vous appelez, avec false. Cependant, vous avez 50% de la branche de la couverture dans le premier cas, de sorte que vous pouvez le voir il y a quelque chose qui manque dans votre essai (et souvent, dans votre code).

64voto

Tomasz Nurkiewicz Points 140462

Prenez ce code comme un exemple simplifié:

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

Si votre test seulement des exercices de l' cond pour être vrai et n'est jamais à l' else direction générale, vous avez:

  • 4 des 5 lignes de couverts
  • 1 sur 2 branches couvertes

Aussi Cobertura rapport lui-même introduit quelques belles pop-up à l'aide des info-bulles lorsque l'en-tête de colonne est cliqué:

La Couverture en ligne - Le pourcentage de lignes exécutées par cet essai.

Direction générale de la Couverture - Le pourcentage de branches exécutée par cet essai.

3voto

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

Vous devez traiter toutes les lignes des branches 1 et 2 pour obtenir une couverture totale de LineCoverage et de BranchCoverage.

Si vous manquez quelque chose d'autre, vous obtiendrez la moitié de la couverture de la succursale. Si vous avez omis quelque chose dans le nombre de lignes dans if et else, vous obtiendrez BranchCoverage à 100% mais pas à 100% avec une couverture en ligne.

J'espère que cela t'aides.

0voto

Nirmal Points 83

Voir ci-dessous exemple

Exemple de couverture de ligne et de marque

Quelle est la couverture de ligne et de branche?

Couverture de lignes -> Pendant les tests, quel pourcentage de lignes ont été couvertes Couverture de branches-> Pendant la couverture de test, combien de branches ont été couvertes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X