How to run go test for all test files in my project, except for vendor packages

My project folder contains:

Makefile README.md component/ driver/ service/ vendor/ worker/ 

I want to run go test in all test files, for example. foobar_test.go , excluding test files in the vendor package. The closest I have succeeded is go test ./... , but this includes the vendor test files.

I saw in the documentation that you can pass a regular expression to the -run parameter, but I had problems with its operation. For example, I tried go test ./* , but I get a bunch of can't load package errors .

What is the best way to do this?

+5
source share
2 answers

The -run pattern matches only with the test identifier (and not with the file name); basically you could do:

 go test -run TestFoo 

but if you need to add Foo to all the names of the test functions that you probably don't need.

The usual way to do this is:

 go test $(go list ./... | grep -v /vendor/) 

There's a long discussion on GitHub about this . It was subsequently amended after another lengthy discussion .

Starting with Go 1.9 , the vendor directory is automatically excluded. Now you can directly type this:

 go test ./... 
+14
source

cmd / go: exclude vendor directory from matching ... # 19090

[go] cmd / go: exclude performance packages from ... matches

 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 

Try running go test ./... at the end or wait for Go1.9.

+2
source

Source: https://habr.com/ru/post/1266950/


All Articles