我必须从一位同事手中接过一个go项目,我之前从未接触过Go,它没有测试,所以我开始添加它们但是我无法运行它们。
运行测试的go命令是go test
,但它似乎不在根级别运行。
我的项目结构是:
/project/main.go
/project/engine/*.go
/project/api/*.go
如果我cd
进入engine
或api
,并运行go test
它可以正常工作,但不在根文件夹中。
cd /project
go test
? /project [no test files]
无论如何从根运行所有测试?
答案 0 :(得分:2)
您可以使用...
(省略号)运算符来测试当前包的所有子包。像那样:go test ./...
。
如果您执行更复杂的操作,可能需要稍后尝试其他解决方案,例如使用list
工具。像那样(例如):go test $(go list ./... | grep [regex])
。这对于从测试中排除vendor
目录很有用。
您可能想要了解的另一件事是gt
命令,可在此处找到https://godoc.org/rsc.io/gt并将缓存添加到go test
命令。
最后,请不要犹豫,阅读https://blog.golang.org/cover以获取有关golang中代码覆盖率分析的信息。
答案 1 :(得分:0)
仅运行sudo go test -v ./...
可能会失败,因为您可能没有为GO设置根环境,就像您设置了非根环境一样。
您可以重置根目录中的所有内容,或执行以下简单步骤:
sudo -E go test -v ./...
这将以root身份运行,但保留您的环境设置。
答案 2 :(得分:0)
我发现从项目根目录运行时 go test ./...
实际上会从 pkg/pkg_name/
文件夹运行,这让我很恼火。您可以通过在 cwd
辅助函数中设置 init()
来将测试设置为项目根目录。
我找到了解决方案 here 您可以在 _file 中尝试以下代码段:
func init() {
_, filename, _, _ := runtime.Caller(0)
dir := path.Join(path.Dir(filename), "../..") // change to suit test file location
err := os.Chdir(dir)
if err != nil {
panic(err)
}
}
上面的这段代码适用于我在 pkg/$name/$name_test.go
中的测试。