Du code impossible à couvrir
(blog.npcode.com)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
Code impossible à couvrir
https://toss.im/slash-21/sessions/1-6
Tordre le code pour afficher 100 % de couverture donne l’impression de mettre la charrue avant les bœufs.
Le code n’était pas tordu. Il existe simplement d’autres façons, plus confortables d’un point de vue humain.
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.
L’enfer du 100 % de couverture de tests…
MDRRRR
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
J’ai bien lu le contenu sur slash 21 haha
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...