2014-07-09 2 views
0

En sonarqube je remarque un comportement surprenant avec des constructions telles quecouverture partielle dans la branche Sonar avec JaCoCo lorsque vous parcourez les valeurs ENUM

for (final MyEnum myEnum : MyEnum.values()) { 
    ... 
} 

MyEnum est une coutume enum défini dans mon projet. La ligne contenant l'instruction for est affichée comme une branche non couverte même si le code environnant et le corps de la boucle sont marqués comme couverts (et en fait, ils sont exécutés par au moins un test).

Je ne comprends pas ce comportement. Depuis values() retourner MyEnum[], en interne, ce type de boucle for devrait évaluer à quelque chose d'équivalent à for (int i = 0; i < values.length; i++) {values serait le résultat de values() stocké dans une variable temporaire. Clairement il y a une branche ici mais comme il y a plus de 0 éléments dans le tableau, la branche qui entre dans la boucle et la branche qui la brise sont exécutées. Alors, pourquoi ne vois-je pas cette ligne comme ayant une couverture de branche complète?

+0

L'ajout d'un test avec une collection vide aide-t-il? – Keppil

+0

Qu'entendez-vous par "un test avec une collection vide"? –

+0

Il ne serait peut-être pas possible d'utiliser 'MyEnum.values ​​()', mais j'étais curieux de savoir si l'ajout d'un test avec un iterable vide dans la boucle for-each ferait apparaître la branche comme couverte. – Keppil

Répondre

1

Ce résultat surprenant de Sonar était une mauvaise interprétation de mon côté. Le manque de couverture de branche a été causé par le manque de couverture de code dans cette méthode particulière. Puisque le code n'a pas été couvert du tout (contrairement à ce que j'ai d'abord pensé et écrit dans la question), ni l'un ni l'autre ne pourrait être la branche dans la boucle for.

Questions connexes