Mon dossier de projet contient:
Makefile README.md component/ driver/ service/ vendor/ worker/
Je voudrais exécuter go test
sur tous les fichiers de test, par exemple foobar_test.go
fichiers à l'exception des fichiers de test dans le package du fournisseur. Le plus proche de ma réussite a été avec go test ./...
mais qui comprenait des fichiers de test du fournisseur.
J'ai vu dans la documentation que vous pouvez transmettre une expression régulière à -run
option mais j'ai du mal à le faire fonctionner. Par exemple, j'ai essayé go test ./*
, mais je reçois un tas de can't load package errors
.
Quelle est la meilleure façon de procéder?
Le -run
le modèle est mis en correspondance uniquement avec l'identificateur de test (pas le nom de fichier); en principe, vous pourriez faire:
go test -run TestFoo
mais quand vous devez ajouter Foo
à tous les noms de vos fonctions de test, ce que vous ne voulez probablement pas.
La manière habituelle de procéder est la suivante:
go test $(go list ./... | grep -v /vendor/)
Il y a ne longue discussion à ce sujet sur GitHub . Il a finalement été modifié après une autre longue discussion .
À partir de Go 1.9 , le répertoire vendor
est automatiquement exclu. Maintenant, vous pouvez directement taper ceci:
go test ./...
cmd/go: exclure le répertoire du vendeur de la correspondance
...
# 1909[go] cmd/go: exclure les packages vendus des ... correspondances
By overwhelming popular demand, exclude vendored packages from ... matches, by making ... never match the "vendor" element above a vendored package. go help packages now reads: An import path is a pattern if it includes one or more "..." wildcards, each of which can match any string, including the empty string and strings containing slashes. Such a pattern expands to all package directories found in the GOPATH trees with names matching the patterns. To make common patterns more convenient, there are two special cases. First, /... at the end of the pattern can match an empty string, so that net/... matches both net and packages in its subdirectories, like net/http. Second, any slash-separted pattern element containing a wildcard never participates in a match of the "vendor" element in the path of a vendored package, so that ./... does not match packages in subdirectories of ./vendor or ./mycode/vendor, but ./vendor/... and ./mycode/vendor/... do. Note, however, that a directory named vendor that itself contains code is not a vendored package: cmd/vendor would be a command named vendor, and the pattern cmd/... matches it. Fixes #19090.
aller/aller/fa1d54c2edad607866445577fe4949fbe55166e1
commit fa1d54c2edad607866445577fe4949fbe55166e1 Wed Mar 29 18:51:44 2017 +0000
Essayez d'exécuter go test ./...
à la pointe ou attendez Go1.9.