web-dev-qa-db-fra.com

Comment exécuter le test go sur tous les fichiers de test de mon projet, à l'exception des packages du fournisseur

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?

16
Daniel Kobe

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 ./...
34
Martin Tournoij

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.

3
peterSO