小编典典

当测试在另一个软件包中时,获取覆盖率统计信息

go

我的测试与我的代码不在同一个程序包中。我发现这是一种使用很多测试文件来组织代码库的简洁方法,而且我读到,将测试限制为通过包的公共api进行交互是一个好主意。

所以看起来像这样:

api_client:
    Client.go
    ArtistService.go
    ...
api_client_tests
    ArtistService.Events_test.go
    ArtistService.Info_test.go
    UtilityFunction.go
    ...

我可以打字go test bandsintown-api/api_client_tests -cover 看看0.181s coverage: 100.0% of statements。但这实际上只是对我的报道UtilityFunction.go(就像我跑步go test bandsintown-api/api_client_tests -cover=cover.out和 时所说的那样go tool cover -html=cover.out)。

有什么方法可以将实际api_client测试中的包装覆盖,而不必将所有包装放到同一包装中?


阅读 225

收藏
2020-07-02

共1个答案

小编典典

正如评论中提到的,您可以运行

go test -cover -coverpkg "api_client" "api_client_tests"

进行覆盖测试。

但是将代码文件从测试文件拆分到其他目录并不是Go的方法。

我想您想进行一次黑盒测试(包私有的东西在外部都无法访问,即使对于测试也是如此)。

为此,可以在另一个程序包中进行测试(不移动文件)。例:

api_client.go

package api_client

// will not be accessible outside of the package
var privateVar = 10

func Method() {
}

api_client_test.go

package api_client_tests

import "testing"

func TestClient(t *testing.T) {
    Method()
}
2020-07-02