8 points par ohjongin 2022-06-22 | 9 commentaires | Partager sur WhatsApp

Même avec un code Kotlin aussi simple, tester toutes les branches est presque impossiblement difficile. En effet, lorsque Kotlin compile ce code en bytecode, il génère des branches que l’auteur du code n’avait pas prévues.

when(answer) {
"yes" -> true
else -> false
}

Tout en offrant de nombreuses fonctionnalités pratiques aux développeurs, Kotlin génère aussi à la compilation en bytecode, comme ici, de nombreuses branches invisibles pour l’utilisateur. Or, jacoco, l’outil de couverture de tests le plus utilisé sur la plateforme JVM, calcule la couverture de branches à partir du bytecode. Il peut donc exiger la couverture de branches dont les développeurs Kotlin n’ont même pas conscience. Par conséquent, si un développeur Kotlin essaie d’atteindre 100 % de couverture de tests, il peut dans des cas comme celui-ci devoir décompiler le code. Et avec encore moins de chance, si la décompilation échoue, il peut devoir inspecter directement le bytecode pour vérifier quelles branches existent.

9 commentaires

 
mse9000 2022-06-23

Code impossible à couvrir

https://toss.im/slash-21/sessions/1-6

 
youknowone 2022-06-23

Tordre le code pour afficher 100 % de couverture donne l’impression de mettre la charrue avant les bœufs.

 
innoceive 2022-06-23

Le code n’était pas tordu. Il existe simplement d’autres façons, plus confortables d’un point de vue humain.

 
regentag 2022-06-23

Dans le domaine de la défense (systèmes d’armes), les directives de la DAPA exigent une couverture de code de 100 %.
En pratique, il est difficile d’atteindre 100 %, mais je crois savoir qu’en contrepartie, pour chaque partie non couverte, il faut ajouter une explication indiquant précisément pourquoi elle ne peut pas être couverte.

 
doldari 2022-06-22

L’enfer du 100 % de couverture de tests…

 
roxie 2022-06-23

MDRRRR

 
ganadist 2022-06-22

Dans les cas de branchement sur enum / sealed / boolean, si ce n’est pas correctement géré, le compilateur a été modifié pour émettre un avertissement avec Kotlin 1.6, puis une erreur à partir de la 1.7.

https://youtrack.jetbrains.com/issue/KT-47709

 
525hm 2022-06-22

J’ai bien lu le contenu sur slash 21 haha

 
ohjongin 2022-06-22

Ah~ donc ça venait de slash 21... Je l’ai vu pour la première fois sur le Twitter d’une connaissance... Désolé d’arriver après la bataille...