当前位置: 代码网 > it编程>前端脚本>Golang > golang使用go test输出单元测试覆盖率的方式

golang使用go test输出单元测试覆盖率的方式

2024年05月19日 Golang 我要评论
一、背景单元测试覆盖率是衡量代码质量的一个重要指标,重要的代码文件覆盖率应该至少达到80%以上。java 可以通过jacoco 统计覆盖率,那么go 项目如何进行代码覆盖率测试呢?二、统计方式1、生成

一、背景

单元测试覆盖率是衡量代码质量的一个重要指标,重要的代码文件覆盖率应该至少达到80%以上。java 可以通过jacoco 统计覆盖率,那么go 项目如何进行代码覆盖率测试呢?

二、统计方式

1、生成覆盖率报告(go test 指令)

我们知道直接执行测试代码的指令: go test 指定文件名称 -run “测试方法”。

项目工程是如下架构的,可以通过这种方式生成覆盖率报告:

在这里插入图片描述

go test -mod=vendor -covermode=count -coverprofile=coverprofile.cov -run="^test" -coverpkg=$(go list -mod=vendor ./... | grep -v "/test" | tr '\n' ',') ./...

或 非 vendor 模式:
go test -covermode=count -coverprofile=coverprofile.cov -run="^test" -coverpkg=$(go list ./... | grep -v "/test" | tr '\n' ',') ./...

生成结果:coverprofile.cov

指令简单说明:

mod=vendor: 加载依赖的方式:从本地vendor 目录加载。适用于服务器不能从外网下载依赖的情况

covermode: count: 统计代码访问次数;set: 统计代码是否被访问; atomic: 一般在并发工程中使用(?)

run: 正则方式指定需要运行的测试方法

coverpkg: 指定业务代码路径,多个用逗号隔开,详细说明在后面

./…:遍历当前目录下测试文件,包括子目录

关于为什么要使用coverpkg:

主要是因为我们的项目结构中,测试代码和业务代码是分开的,而不是放到同一个目录中。因此如果只指定测试方法,就无法识别到业务代码,来计算覆盖率了。

因此我们既需要指定测试代码路径(当然这里声明为 ./… 就可以了,只有_test 结尾的方法会自动作为测试方法),也需要指定业务代码路径(通过grep -v 和 tr 指令,最终将业务代码输出成 git/controller,git/database 的格式)

2、打开覆盖率报告

通过html 文件打开(推荐,能看到方法细节):

go tool cover -html=coverprofile.cov

在命令行直接查看:

go tool cover -func=coverprofile.cov

三、展望

当然我们可能会遇到一些特殊情况:比如不希望将init 方法也列入统计等等,这些后续再补充。

到此这篇关于golang使用go test输出单元测试覆盖率的方式的文章就介绍到这了,更多相关go test单元测试覆盖率内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com