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 la couverture des lignes et des succursales?
La couverture de ligne mesure le nombre d'instructions que vous avez prises (une instruction est généralement une ligne de code, sans les commentaires, les conditions, etc.). La couverture des succursales vérifie si vous avez pris la branche vraie et fausse pour chaque condition (si, pendant, pour). Vous aurez deux fois plus de branches que les conditionnelles.
Qu'est-ce que tu en as à 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
défini sur true
, vous obtenez une couverture d'instruction de 100%. Ça m'a l'air bien? NOPE, il y aura un pointeur nul si vous appelez avec false
. Cependant, vous avez une couverture de 50% dans le premier cas, vous pouvez donc voir qu'il manque quelque chose dans vos tests (et souvent, dans votre code).
Prenez ce code comme exemple simplifié:
if(cond) {
line1();
line2();
line3();
line4();
} else {
line5();
}
Si votre test n'exerce que le cond
étant vrai et n'exécute jamais la branche else
que vous avez:
Cobertura report lui-même présente également quelques info-bulles d'aide contextuelle Nice lorsque l'en-tête de colonne est cliqué:
Couverture de ligne - Pourcentage de lignes exécutées par ce test.
Couverture des branches - Pourcentage de branches exécutées par ce test.
if(cond){
//branch 1
}else{
//branch 2
}
Vous devez traiter toutes les lignes de la branche 1 et de la branche 2 pour obtenir une couverture à 100% pour LineCoverage et BranchCoverage.
Si vous manquez quoi que ce soit d'autre, vous obtiendrez la moitié de la couverture de la succursale. Si vous avez manqué quelque chose dans # de lignes à la fois si et sinon, vous obtiendrez BranchCoverage de 100% mais pas 100% avec une couverture de ligne.
J'espère que cela t'aides.