为了账号安全,请及时绑定邮箱和手机立即绑定

如何衡量 Golang 集成测试覆盖率?

如何衡量 Golang 集成测试覆盖率?

Go
慕的地6264312 2021-09-13 15:34:21
我正在尝试使用go test -cover来衡量我正在构建的服务的测试覆盖率。它是一个 REST API,我正在通过旋转它来测试它,发出测试 HTTP 请求并查看 HTTP 响应。这些测试不是服务包的一部分,go tool cover返回 0% 的测试覆盖率。有没有办法获得实际的测试覆盖率?我希望在给定端点上进行的最佳场景测试至少可以覆盖 30-50% 的特定端点处理程序代码,并通过添加更多常见错误测试来进一步改进这一点。
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

我被指向-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 很陌生,所以这很可能不是通过集成测试来衡量测试覆盖率的最佳方式。


查看完整回答
反对 回复 2021-09-13
?
森林海

TA贡献2011条经验 获得超2个赞

您可以以创建覆盖 html 页面的方式运行 go test。像这样:


go test -v -coverprofile cover.out ./...

go tool cover -html=cover.out -o cover.html

open cover.html


查看完整回答
反对 回复 2021-09-13
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

据我所知,如果你想要覆盖,你需要运行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


查看完整回答
反对 回复 2021-09-13
  • 3 回答
  • 0 关注
  • 221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信