我正在尝试使用 go test -cover
测量我正在建设的服务的测试覆盖率。它是一个REST API,我通过旋转它来测试它,进行测试HTTP请求并查看HTTP响应。这些测试不是服务包的一部分 go tool cover
返回0%测试覆盖率。有没有办法获得实际的测试覆盖率?我希望在给定端点上进行最佳情况测试,以覆盖特定端点处理程序的至少30-50%的代码,并通过添加更多常见错误测试来进一步改进。
我正在尝试使用 go test -cover
测量我正在建设的服务的测试覆盖率。它是一个REST API,我通过旋转它来测试它,进行测试HTTP请求并查看HTTP响应。这些测试不是服务包的一部分 go tool cover
返回0%测试覆盖率。有没有办法获得实际的测试覆盖率?我希望在给定端点上进行最佳情况测试,以覆盖特定端点处理程序的至少30-50%的代码,并通过添加更多常见错误测试来进一步改进。
我被指出了 -coverpkg
指令,它做我需要的 - 测量特定包中的测试覆盖率,即使使用此包而不是它的一部分的测试。例如:
$ go test -cover -coverpkg mypackage ./src/api/...
ok /api 0.190s coverage: 50.8% of statements in mypackage
ok /api/mypackage 0.022s coverage: 0.7% of statements in mypackage
相比
$ go test -cover ./src/api/...
ok /api 0.191s coverage: 71.0% of statements
ok /api/mypackage 0.023s coverage: 0.7% of statements
在上面的例子中,我有测试 main_test.go
在... package main
正在使用 package mypackage
。我最感兴趣的是报道 package mypackage
因为它包含项目中99%的业务逻辑。
我是Go的新手,所以很可能这不是通过集成测试来衡量测试覆盖率的最佳方法。
我被指出了 -coverpkg
指令,它做我需要的 - 测量特定包中的测试覆盖率,即使使用此包而不是它的一部分的测试。例如:
$ go test -cover -coverpkg mypackage ./src/api/...
ok /api 0.190s coverage: 50.8% of statements in mypackage
ok /api/mypackage 0.022s coverage: 0.7% of statements in mypackage
相比
$ go test -cover ./src/api/...
ok /api 0.191s coverage: 71.0% of statements
ok /api/mypackage 0.023s coverage: 0.7% of statements
在上面的例子中,我有测试 main_test.go
在... package main
正在使用 package mypackage
。我最感兴趣的是报道 package mypackage
因为它包含项目中99%的业务逻辑。
我是Go的新手,所以很可能这不是通过集成测试来衡量测试覆盖率的最佳方法。
据我所知,如果你想要覆盖,你需要运行 go test -cover
。
但是,添加一个可以传入的标志很容易,这将启用这些额外的测试,因此您可以将它们作为测试套件的一部分,但不要正常运行它们。
所以在你的。中添加一个命令行标志 whatever_test.go
var integrationTest = flag.Bool("integration-test", false, "Run the integration tests")
然后在每个测试中做这样的事情
func TestSomething(t *testing.T){
if !*integrationTest {
t.Skip("Not running integration test")
}
// Do some integration testing
}
然后运行集成测试
go run -cover -integration-test