测试在另一个包中时获取Coverage统计数据

Nat*_*per 5 unit-testing code-coverage go

我的测试与我的代码不在同一个包中.我发现用一些测试文件来组织一个代码库是一种不那么混乱的方式,我已经读过,为了限制测试通过软件包的公共api进行交互,这是一个好主意.

所以它看起来像这样:

api_client:
    Client.go
    ArtistService.go
    ...
api_client_tests
    ArtistService.Events_test.go
    ArtistService.Info_test.go
    UtilityFunction.go
    ...
Run Code Online (Sandbox Code Playgroud)

我可以输入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.outgo tool cover -html=cover.out).

有没有办法获得api_client正在测试的实际包的覆盖范围,而不是将它们全部放入同一个包中?

Ole*_*lov 5

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

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() {
}
Run Code Online (Sandbox Code Playgroud)

api_client_test.go

package api_client_tests

import "testing"

func TestClient(t *testing.T) {
    Method()
}
Run Code Online (Sandbox Code Playgroud)