私のプロジェクトフォルダーには以下が含まれます。
Makefile README.md component/ driver/ service/ vendor/ worker/
すべてのテストファイルに対してgo test
を実行したい。ベンダーパッケージ内のテストファイルを除くfoobar_test.go
ファイル。最も成功したのはgo test ./...
でしたが、ベンダーテストファイルが含まれていました。
私はドキュメントで-run
オプションに正規表現を渡すことができますが、これを機能させるのに問題があります。たとえば、go test ./*
を試しましたが、can't load package errors
がたくさんあります。
これを行う最良の方法は何ですか?
-run
パターンはテスト識別子とのみ一致します(ファイル名とは一致しません)。原則として次のことができます。
go test -run TestFoo
ただし、Foo
をすべてのテスト関数名に追加する必要がある場合は、おそらく必要ありません。
これを行う通常の方法は次のとおりです。
go test $(go list ./... | grep -v /vendor/)
GitHubでの長い議論 があります。最終的に変更されました 別の長い議論の後 。
Go 1.9 で始まる、vendor
ディレクトリは自動的に除外されます。これで、これを直接入力できます。
go test ./...
cmd/go:一致する
...
#19090からベンダーディレクトリを除外します[go] cmd/go:...からベンダーパッケージを除外する
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.
go/go/fa1d54c2edad607866445577fe4949fbe55166e1
commit fa1d54c2edad607866445577fe4949fbe55166e1 Wed Mar 29 18:51:44 2017 +0000
ヒントでgo test ./...
を実行するか、Go1.9を待ちます。