Apprends à tester tes exercices D sur Exercism
Chaque exercice fournit les tests unitaires. C'est à toi de fournir l'implémentation. Chaque fichier produit un exécutable console qui lance les tests. Lancer l'exécutable de test affiche un message pour chaque test qui échoue et renvoie un code de sortie non nul lorsque des tests échouent.
Note : ton code est testé par la suite de tests à chaque fois que tu compiles ton projet. Si ton code ne passe pas un ou plusieurs tests mais reste du code D valide, il sera quand même compilé.
Pour chaque exercice, la démarche est la suivante :
dub test
dmd source/*.d -de -w -main -unittest, puis exécuter le binaire obtenu.Note : D prend en charge les tests unitaires directement dans le langage, c'est pourquoi les tests unitaires se trouvent généralement dans le même fichier que l'implémentation. Les tests unitaires sont exécutés avant le corps de main et sont activés dans l'exécutable final grâce à l'option de compilation -unittest.
Si tous les tests réussissent, la sortie des tests peut ressembler à ceci :
$ dub test
Generating test runner configuration 'dnd-character-test-library' for 'library' (library).
Starting Performing "unittest" build using dmd for x86_64.
Building dnd-character ~master: building configuration [dnd-character-test-library]
Linking dnd-character-test-library
Running dnd-character-test-library
1 modules passed unittests
La sortie des tests peut être difficile à lire lorsqu'il y a des tests qui échouent.
$ dub test
Generating test runner configuration 'dnd-character-test-library' for 'library' (library).
Starting Performing "unittest" build using dmd for x86_64.
Building dnd-character ~master: building configuration [dnd-character-test-library]
Linking dnd-character-test-library
Running dnd-character-test-library
core.exception.AssertError@source/dnd_character.d(102): unittest failure
----------------
??:? _d_unittestp [0x5568ff91bf05]
source/dnd_character.d:102 void dnd_character.__unittest_L30_C1() [0x5568ff911fee]
??:? void dnd_character.__modtest() [0x5568ff913760]
??:? int core.runtime.runModuleUnitTests().__foreachbody6(object.ModuleInfo*) [0x5568ff928f82]
??:? int object.ModuleInfo.opApply(scope int delegate(object.ModuleInfo*)).__lambda2(immutable(object.ModuleInfo*)) [0x5568ff9148f7]
??:? int rt.minfo.moduleinfos_apply(scope int delegate(immutable(object.ModuleInfo*))).__foreachbody2(ref rt.sections_elf_shared.DSO) [0x5568ff92003f]
??:? int rt.sections_elf_shared.DSO.opApply(scope int delegate(ref rt.sections_elf_shared.DSO)) [0x5568ff9200d1]
??:? int rt.minfo.moduleinfos_apply(scope int delegate(immutable(object.ModuleInfo*))) [0x5568ff91ffcd]
??:? int object.ModuleInfo.opApply(scope int delegate(object.ModuleInfo*)) [0x5568ff9148c9]
??:? runModuleUnitTests [0x5568ff928db7]
??:? void rt.dmain2._d_run_main2(char[][], ulong, extern (C) int function(char[][])*).runAll() [0x5568ff91d248]
??:? void rt.dmain2._d_run_main2(char[][], ulong, extern (C) int function(char[][])*).tryExec(scope void delegate()) [0x5568ff91d1d5]
??:? _d_run_main2 [0x5568ff91d13e]
??:? _d_run_main [0x5568ff91cf27]
/usr/include/dmd/druntime/import/core/internal/entrypoint.d:29 main [0x5568ff90f8f1]
??:? [0x7f473154a249]
??:? __libc_start_main [0x7f473154a304]
??:? _start [0x5568ff90f7e0]
1/1 modules FAILED unittests
Error Program exited with code 1
Il y a beaucoup de détails dans cette trace d'appels, mais la ligne importante est celle juste au-dessus de ----------------
core.exception.AssertError@source/dnd_character.d(102): unittest failure
Cette ligne t'indique que l'assertion qui échoue se trouve à la ligne 102 du fichier dnd_character.d. Tu peux t'en servir pour identifier précisément le test qui ne répond pas aux attentes.