如何在我的项目中运行`go test`命令来测试所有的测试?

285
"go test" 命令只覆盖一个目录中的 "*_test.go" 文件。 我想对整个项目进行 "go test",这意味着测试应覆盖位于 "./" 目录及其子目录下的所有 "*_test.go" 文件。 如何使用命令实现此操作?
3个回答

555
这将运行当前目录及其所有子目录中的所有测试:
$ go test ./...

这将针对特定目录运行所有测试:
$ go test ./tests/... ./unit-tests/... ./my-packages/...

这将运行以导入路径前缀为 foo/ 的所有测试:

$ go test foo/...

这应该运行所有以 foo 为前缀的路径的测试:

$ go test foo...

这将运行您$GOPATH中的所有测试:

$ go test ...

7
在zsh中,最后一个例子中的裸体...必须被转义,即go test \...。"FYI"表示提供信息而无需回复。 - Gabe Kopley
当我尝试在子目录中运行所有测试时,会出现“go: warning: "subdir/..." matched no packages”的警告。 - Ivan Aracki
@zzzz 怎样运行特定文件夹的测试?比如说 "go test foo... bar...? - omurbek
"go test ./..." 真的是一个很棒的命令!感谢您的帮助 :) - bumblebee
1
如果您想查看成功测试的输出,请不要忘记使用“-v”参数。 - ufukty
“./…” 的文档在哪里可以找到?在谷歌上搜索很困难。 - Eric Burel

83

1
尽管这个解决方案看起来很简单,但对于使用Windows的人(我不是,但我的一些团队成员是)来说,运行它会变得更加复杂。Go在每个平台上本地运行而无需Makefile的优美之处是伟大的。 - Konrad Kleine
6
值得指出的是,从 Go 1.9 开始(参见 https://golang.org/doc/go1.9#vendor-dotdotdot),`./...` 不再匹配 ./vendor/ 目录,因此您可以使用 go test ./... 运行所有测试,而不运行任何供应商测试。 - nickgrim

16

文件夹结构

ProjectName/folderName1/file_test.go
ProjectName/folderName2/file1_test.go
ProjectName/folderName3/file2_test.go

go test命令

   ProjectName$ go test -v ./...
    ProjectName$ go test  ./...
    ProjectName$ go test -cover ./...

整个项目的覆盖率报告

ok      ProjectName/folderName1 10%
ok      ProjectName/folerName2  90%
ok      ProjectName/folerName2  85%

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接