从根项目文件夹运行测试

时间:2016-04-19 13:18:05

标签: go

我必须从一位同事手中接过一个go项目,我之前从未接触过Go,它没有测试,所以我开始添加它们但是我无法运行它们。

运行测试的go命令是go test,但它似乎不在根级别运行。

我的项目结构是:

/project/main.go
/project/engine/*.go
/project/api/*.go

如果我cd进入engineapi,并运行go test它可以正常工作,但不在根文件夹中。

cd /project
go test

 ?      /project    [no test files]

无论如何从根运行所有测试?

3 个答案:

答案 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 中的测试。