Différences entre les lignes et les twigs

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 par ligne et par twig?

    La couverture de ligne mesure le nombre d’instructions que vous avez sockets (une déclaration est généralement une ligne de code, n’incluant pas les commentaires, les conditions, etc.). Les couvertures de twig vérifient si vous avez pris la twig true et false pour chaque condition (if, while, for). Vous aurez deux fois plus de twigs que les conditionnelles.

    Pourquoi est-ce que tu t’en préoccupes? 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 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 ne fait qu’exercer la cond vraie et ne lance jamais la twig else , vous avez:

    • 4 lignes sur 5 couvertes
    • 1 sur 2 twigs couvertes

    Le rapport Cobertura introduit lui-même des info-bulles d’aide lorsque vous cliquez sur l’en-tête de la colonne:

    Line Coverage – Le pourcentage de lignes exécutées par ce test.

    Branch Coverage – Le pourcentage de twigs exécutées par ce test.

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

    Vous devez vous adresser à toutes les lignes (twigs 1 et 2) pour obtenir une couverture à 100% à la fois pour LineCoverage et BranchCoverage.

    Si vous manquez quelque chose d’autre, vous obtiendrez la moitié de la couverture des succursales. Si vous avez manqué quelque chose dans # de lignes dans les deux, vous obtiendrez BranchCoverage à 100% mais pas à 100% avec une couverture de ligne.

    J’espère que cela t’aides.