web-dev-qa-db-fra.com

Tests de Golang dans un sous-répertoire

Je souhaite créer un package dans Go avec des tests et des exemples pour le package en tant que sous-répertoires afin de garder l'espace de travail plus propre. Est-ce possible, et si oui comment?

Toute la documentation place toujours le code de test au même endroit que l'autre code, est-ce mieux d'une manière ou d'une convention?

91

Notez que vous pouvez lancez go test "Récursivement": vous devez lister tous les paquets que vous voulez tester .

Si vous êtes le dossier racine de votre projet Go, tapez:

go test ./...

La notation './...' Est décrite dans la section " Description des listes de paquets " du " commande go ":

Un chemin d'importation est un modèle s'il comprend un ou plusieurs caractères génériques "...", Chacun d'entre eux pouvant correspondre à n'importe quelle chaîne, y compris la chaîne vide et les chaînes contenant des barres obliques.

Un tel modèle s'étend à tous les répertoires de paquetages trouvés dans les arbres GOPATH avec des noms correspondant aux modèles.

Dans des cas particuliers, x/... Correspond à x ainsi qu'aux sous-répertoires de x.
Par exemple, net/... S'étend à net et aux packages de ses sous-répertoires.


Si vous conservez vos fichiers _test.go Dans un sous-dossier, la commande 'go test ./...' Pourra les récupérer.
Mais:

  • vous aurez besoin de préfixer vos variables et fonctions exportées (utilisées dans vos tests) avec le nom de votre package afin que le fichier de test puisse accéder au contenu exporté du package.
  • vous n'auriez pas accès à du contenu non exporté.

Cela étant dit, je préférerais quand même conserver le fichier _test.go Juste à côté du fichier source principal: c'est plus facile à trouver.

155
VonC

Placez vos tests aux côtés de votre code dans le même répertoire dans un fichier nommé file_test.go où "fichier" est le nom du fichier de code source que vous testez. C’est une convention et j’ai trouvé que c’était mieux dans ma propre expérience.

Si la go test L’outil n’est pas assez automatisé pour vous, vous pouvez vous tourner vers GoConvey, qui possède une interface Web qui mettre à jour et exécuter automatiquement les tests Go traditionnels ainsi que les tests GoConvey (basés sur le comportement et se documentant davantage que les tests Go traditionnels).

12
Matt

Construit sur la réponse de VonC,

Pour ceux qui aiment garder leurs tests dans un sous-dossier, disons test, puis lancez

go test ./...

essayera de lancer des tests dans le dossier chaque, même ceux qui ne contiennent pas de test, ayant ainsi un ? dans le rapport suivant pour les dossiers non testés.

Fonctionnement

go test ./.../test

au lieu de cela, vous ne ciblerez que vos dossiers test, ce qui permettra de disposer d'un rapport propre uniquement sur vos dossiers de tests.

3
avi.elkharrat

Je ne fais normalement pas de test, mais vous pouvez grouper votre fichier dans des répertoires et utiliser import comme

import "./models" si est un niveau sur
import "../models si est un niveau sur et un niveau dans

Par exemple, pour:
./models/todo.go
./test/todo_test.go

tester todo.go de todo_test.go, votre importation dans le todo_test.go sera

import "../models"

0
Felix Zilla