go-test-compile
compiling all golang tests without running.
It can be used like go build
that also build tests or like go test -c
that works for multiple packages.
- It does not run any TestMain.
- It can save resulting binaries.
Idea is to use go test --exec
flag. Here it's doc from go help test
:
-exec xprog
Run the test binary using xprog. The behavior is the same as
in 'go run'. See 'go help run' for details.
- If pass
--exec
that doesexit 0
, than it works like build all binaries and don't save them. - If pass
--exec
that moves binary somewhere, than works like Build all binaries and do save them (maybe in a directory tree).
# Download somewhere in PATH.
GO_TEST_COMPILE="$(go env GOPATH)/bin/go-test-compile"
curl -s https://raw.githubusercontent.com/skipor/go-test-compile/main/go-test-compile > "${GO_TEST_COMPILE:?}"
chmod +x "${GO_TEST_COMPILE:?}"
# Check that executable in PATH.
go-test-compile --help
#> go-test-compile wraps 'go test' allowing not run test executables at all (even TestMain)
#> and save compiled test executables for future run.
#>
#> Usage:
#> go-test-compile [-o|--output <output directory>] [go test flags and arguments]
# Download some packages to test.
go get -d -t golang.org/x/tools/...
# Just check that all code building. Like `go build ./...` but also build test packages.
go-test-compile golang.org/x/tools/godoc/...
# Compile all test binaries. # Like `go test -c ./...` if it were implemented.
go-test-compile -o /tmp/test-executables golang.org/x/tools/cmd/godoc golang.org/x/tools/godoc/...
tree /tmp/test-executables
#> /tmp/test-executables
#> └── golang.org
#> └── x
#> └── tools
#> ├── cmd
#> │ └── godoc.test
#> ├── godoc
#> │ ├── redirect.test
#> │ ├── static.test
#> │ ├── vfs
#> │ │ ├── gatefs.test
#> │ │ ├── mapfs.test
#> │ │ └── zipfs.test
#> │ └── vfs.test
#> └── godoc.test