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()) {
...
}
où 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++) {
où 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?
L'ajout d'un test avec une collection vide aide-t-il? – Keppil
Qu'entendez-vous par "un test avec une collection vide"? –
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