我的测试与我的代码不在同一个程序包中。我发现这是一种使用很多测试文件来组织代码库的简洁方法,而且我读到,将测试限制为通过包的公共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)。
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测试中的包装覆盖,而不必将所有包装放到同一包装中?
api_client
正如评论中提到的,您可以运行
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() }