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?
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?
Réponses:
La couverture de ligne mesure le nombre d'instructions que vous avez prises (une instruction est généralement une ligne de code, sans inclure les commentaires, les conditions, etc.). Les couvertures des succursales vérifient si vous avez pris la vraie et la fausse succursale pour chaque condition (si, tant que, pour). Vous aurez deux fois plus de branches que de conditionnels.
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 la valeur isCoolUser
définie sur true
, vous obtenez une couverture de relevé 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 branche 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 un exemple simplifié:
if(cond) {
line1();
line2();
line3();
line4();
} else {
line5();
}
Si votre test n'exerce que le fait d' cond
être vrai et n'exécute jamais la else
branche que vous avez:
Le rapport Cobertura lui-même présente également de belles info-bulles d'aide contextuelle lorsque vous cliquez sur l'en-tête de colonne:
Couverture de ligne - Le pourcentage de lignes exécutées par ce test.
Couverture des succursales - Le pourcentage de succursales exécutées par ce test.
if(cond){
//branch 1
}else{
//branch 2
}
Vous devez vous adresser à toutes les lignes de la branche 1 et de la branche 2 pour obtenir une couverture à 100% à la fois pour LineCoverage et BranchCoverage.
Si vous manquez quoi que ce soit ailleurs, vous obtiendrez la moitié de la couverture de la succursale. Si vous avez manqué quelque chose dans le nombre de lignes à la fois dans if et else, vous obtiendrez BranchCoverage de 100% mais pas de 100% avec une couverture de ligne.
J'espère que cela t'aides.