你正在使用的Go版本是什么( go version
)?
$ go version
go version go1.16.5 windows/amd64
这个问题在最新版本中是否重现?
是的
你正在使用什么操作系统和处理器架构( go env
)?
go env
输出
$ go env
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Patrick\AppData\Local\go-build
set GOENV=C:\Users\Patrick\AppData\Roaming\go\env
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\Patrick\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\Patrick\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.16.5
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=C:\Users\Patrick\dev\internal\go-testing\go.mod
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\Patrick\AppData\Local\Temp\go-build1425292384=/tmp/go-build -gno-record-gcc-switches
你做了什么?
我想测试我的go模块内的所有包。
在网上搜索后,我在Stackoverflow上找到了 go test ./...
。
尽管这在 go help test
中有记录,但它有点隐藏,看起来有点奇怪。
因此我建议添加一个标志 -all
,例如 go test -all
作为 go test ./...
的一个更好的替代方案。
7条答案
按热度按时间clj7thdc1#
尽管这在
go help test
中有记录,但它有点隐藏,看起来有点奇怪。你有什么建议可以使这个更容易找到或使用吗?
我认为在我们添加更多实现相同功能的方法之前,我们应该尝试改进文档。拥有更多方法意味着更多的代码和文档,以及更多的边缘情况;
go test -all .
应该做什么?go test -all ./...
又应该如何?标志是否适用于其他命令?sh7euo9m2#
我考虑了
go test -all
而不是go test -all .
。只需一个简单的命令来运行模块中的所有测试。当前的解决方案似乎有点奇怪。
我喜欢 Go,但在某些方面它可以更简单。例如在 Rust 中,你只需运行
cargo test
就可以运行所有测试。我建议将其作为避免破坏性更改的替代方案。
ff29svar3#
我同意
./...
是一个有点尴尬的模式,但这里真正的概念是一个包模式,而不是一个标志。(比较#40364。)6yjfywim4#
就其价值而言,你确实有
go test all
,但请注意,这真的意味着 一切 ,包括来自你的依赖项的所有软件包。我认为go test -all
和go test all
做非常不同的事情会很奇怪。我想我们可以添加
go test module
,尽管那似乎并不比go test ./...
更易于输入。enxuqcxy5#
我一直在考虑使用
go test mod
作为简写,因为(a)不应该有名为mod
的包,(b)现有的简写模式,如std
和cmd
,主要是三个字母的缩写。让我觉得
./...
不太方便的主要原因是它相对于当前子目录而不是模块根目录。6ljaweal6#
值得注意的是,这意味着你需要测试所有内容,包括你的依赖项中的所有包。
谢谢你指出这一点。我不知道这个。
考虑到这一点,
-all
可能会引起混淆,这是正确的。我喜欢建议的
go test mod
或者作为标志的go test -mod
,这样就不会与名为mod的包发生冲突。laximzn57#
这里有一个添加
mod
包模式的原因;gopls 目前在处理整个模块的包模式时存在困难:golang/tools@bfc1674他们正在进行
${scope}/...
,但这对于例如std/...
来说是行不通的。