Les tests sur le parcours Go

Apprends à tester tes exercices Go sur Exercism


Pour exécuter les exercices Go de ton répertoire de projet exercism, place-toi dans le répertoire de l'exercice et lance go test.

cd exercism/project/directory/go/leap
go test

Tests avec le détecteur de courses de données

En plus de lancer go test, certains exercices doivent être lancés avec un drapeau pour le détecteur de courses de données afin de vérifier que ta solution n'introduit pas de bugs de courses de données. Tu trouveras un rappel pour lancer les tests avec le drapeau -race du détecteur de courses de données dans les exercices concernés. Lance go test -race pour détecter les courses de données. Par exemple :

cd exercism/project/directory/go/bank-account
go test -race

Lance des benchmarks

La plupart des exercices contiennent des benchmarks, qui te permettent de déterminer comment les modifications de ta solution affectent ses performances. Pour lancer les benchmarks d'un exercice, utilise la commande go test -v --bench . --benchmem dans le répertoire de l'exercice.

Prenons cette sortie.

BenchmarkReverse-16       403594              2537 ns/op             176 B/op         34 allocs/op

Cela signifie que le benchmark a nécessité 403 594 itérations pour être chronométré de façon fiable. La vitesse moyenne était de 2 537 ns par boucle. 34 allocations mémoire ont eu lieu par opération, avec une moyenne de 176 octets.

Exemples testables

Les tests d'exemple sont utilisés dans certains exercices et sont exécutés en même temps que les tests standards de l'exercice. Ces exemples servent à documenter et à vérifier l'API de l'exercice, et peuvent t'aider à déterminer quelle est l'API attendue de l'exercice.

Go fmt

Pense à lancer go fmt sur ton code avant de le soumettre.

Astuces et conseils

Code l'exercice

Le README.md de chaque exercice donne une description générale, mais le programme de test Go sera très précis. Ouvre le programme de test et jette-y un coup d'œil rapide. Si ça te semble de la triche, fais-le quand même. Cherche des commentaires utiles, des données de test, et même simplement les noms des fonctions de test. Essaie de lancer go test avant d'avoir écrit quoi que ce soit, et vois si les messages d'erreur te donnent une idée de par où commencer.

Ton premier objectif est d'obtenir quelque chose qui compile, même si ça échoue aux tests. Pour cela, tu devrais « stubber » les fonctions. Cela signifie laisser le corps vide, sauf ce qu'elle doit renvoyer. Écris return 0 ou return "" ou n'importe quoi d'autre, juste pour que ça compile. Parfois, pour déterminer les signatures des fonctions, tu devras revenir au programme de test et le lire plus en détail. Une fois que tu as déterminé toutes les signatures de fonctions requises, le programme de test se plaindra que 0 est la mauvaise réponse. Maintenant, commence à remplir les corps des fonctions.

Corrige

Les tests s'arrêtent souvent à la première erreur. Corrige celle-là, et répète jusqu'à ce qu'il n'y ait plus d'erreurs. go test propose des options utiles. go test -v donne une sortie plus détaillée. go test -run <regexp> ne lance que les tests dont le nom correspond à <regexp>.

Les panic produisent beaucoup de sortie. Ça peut faire peur au début, mais tiens bon. Regarde tout en haut de la sortie du panic pour trouver son message. Il devrait te donner une description générale du problème. Ensuite, parcours le reste à la recherche de la première référence à ton code. Cela pointera souvent directement vers le problème.

Pour trouver les problèmes dans les programmes concurrents, essaie go test -race.

Nettoie ton code

On le répète : lance go fmt. Golint peut t'informer des problèmes de style dans ton code que go fmt ne détecte pas. Tu peux aussi jeter un œil à go vet, qui signale les problèmes potentiels dans ton code. Lis et prends en compte les commentaires fréquents issus des revues de code. Pour un exercice qui implique de la concurrence, essaie go test -race même s'il passe ses tests. Garde la lisibilité à l'esprit même si tu optimises pour les performances du benchmark. Parfois, l'optimisation peut t'aider à découvrir des solutions concises et lisibles, mais la tentation d'abandonner la lisibilité au profit de la performance peut être forte.

Tests bonus

Quelques exercices ont des tests bonus qui ne se lancent pas avec un simple go test. Si tu résous l'exercice bonus en plus de l'exercice normal, tu devras taper go test -tags bonus, ou une commande similaire indiquée dans la documentation du programme de test.