web-dev-qa-db-fra.com

Qu'est-ce qu'une branche dans la couverture de code pour les tests unitaires JavaScript?

J'utilise Istanbul pour la couverture de code des tests unitaires dans un projet AngularJS. Il existe 4 types de couverture et ils sont

  • déclaration
  • branche
  • une fonction
  • ligne

La déclaration, la fonction et la ligne sont correctes mais je ne comprends pas ce qu'est "branche". Quelle est la branche?

27
Evren Kutar

Une branche est l'endroit où le moteur d'exécution peut choisir s'il veut suivre un chemin ou un autre. Prenons l'exemple suivant:

if(a) {
    Foo();
}

if(b) {
    Bar();
}

Yay();

Lorsqu'il atteint la première ligne, il peut décider s'il souhaite ou non entrer dans le corps de l'instruction if(a)-. En outre, il peut décider de ne pas le faire. A ce stade, nous avons déjà vu deux chemins (une branche).

La déclaration suivante après cela devient plus intéressante. Il peut aller dans le corps if et exécuter Bar. Il peut aussi ne pas faire ça. Mais rappelez-vous que nous avons déjà eu une branche avant. Le résultat peut varier si Foo a été appelé ou non.

Nous nous retrouvons donc avec quatre chemins possibles:

  • Ne pas appeler Foo, ne pas appeler Bar non plus
  • Appeler Foo, ne pas appeler Bar
  • Ne pas appeler Foo, appeler Bar
  • Appelant à la fois Foo et Bar

La dernière Yay est toujours exécutée, peu importe si Foo ou Bar a été appelé, de sorte que cela ne compte pas comme une branche. Le fragment de code ci-dessus contient donc quatre chemins/deux branches (appelant Foo() ou non, appelant Bar() ou non).

Comme d’autres réponses déjà mentionnées, de nombreuses affirmations peuvent provoquer une branche (if/switch). N'oubliez pas les boucles conditionnelles, telles que les opérateurs while/for/do-while, ou les circuits en court-circuit (par exemple, &&/||).

L'outil de couverture de code veut s'assurer que vous avez testé toutes les branches. Le mieux serait que tous les chemins aient été testés, ou même toutes les valeurs (cas Edge), pas seulement les branches. Ceci, pour vous assurer qu'aucun comportement indésirable n'est exécuté. 

27
Caramiriel

Quelque part où le code peut prendre plus d’une route, c’est-à-dire qu’il se branche. Quelques exemples d'instructions de branchement sont les instructions if/else et switch.

La couverture des branches suit laquelle de ces branches a été exécutée afin que vous puissiez vous assurer que tous les itinéraires sont testés correctement.

1
James Thorpe

De Wikipedia :

Chaque branche (également appelée chemin DD) de chaque structure de contrôle (telle que dans les instructions if et case) a-t-elle été exécutée? Par exemple, étant donné une instruction if, les branches true et false ont-elles été exécutées? Une autre façon de dire est que tous les Edge du programme ont-ils été exécutés?

Vous devez tester pour chaque structure de contrôle tous les cas possibles (entrer/ne pas entrer dans les instructions if, par exemple, et tous les cas d'un commutateur). La couverture des branches est une mesure qui mesure (généralement en pourcentage) le nombre total de branches couvertes par vos tests. 

0
Matteo Di Napoli