golang-使用 go test 输出单元测试覆盖率
时间:2022-3-29 作者:smarteng 分类: Go语言
一、背景
单元测试覆盖率是衡量代码质量的一个重要指标,重要的代码文件覆盖率应该至少达到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’ ‘,’) ./…
生成结果: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 方法也列入统计等等,这些后续再补充。
smarteng
人生就流星,虽然转瞬即逝,但也有永恒。
- 使用Erlang的OTP框架创建应用
- php 使用curl模拟登录discuz以及模拟发帖
- 腾讯QQ、阿里旺旺、淘宝、MSN在线状态代码生成
- 新浪微博错误代码解析
- erlang程序设计笔记
- 《HTML 5与CSS 3权威指南》权威的HTML5与CSS3实战教程
- dedecms修改数据库密码配置文件
- 服务器优化小记--Etag和Expires
- 在PHP5中使用PHPMailer发送邮件
- PHP中冒号、endif、endwhile、endfor介绍
- PHP框架——ThinkPHP
- QQ登陆成功返回openId后与网站绑定
- Mediawiki的配置和修改方法
- 使用Golang的官方mock工具--gomock、mockgen
- 用yaf-codes-generator 生成代码
- MacOs 电脑关闭/打开IPV6
- MySQL中datetime和timestamp的区别
- C++声明结构
- 如何保证数据库和缓存的一致性
- 优雅的golang日期时间处理库go-carbon
- API接口纪要
- 解析 Golang 测试(11)- 模糊测试
- 解析 Golang 测试(10)- 什么是好的单测
- 解析 Golang 测试(9)- 一篇文章搞懂 testify
- 解析 Golang 测试(8)- gomonkey 实战
- 解析 Golang 测试(7)- 如何针对 Redis 进行 Fake 测试
- 解析 Golang 测试(6)- 如何针对 MySQL 进行 Fake 测试
- 解析 Golang 测试(5)- MySQL 经典 mock driver—— sqlmock
- 解析 Golang 测试(4)- 一篇文章教你分清 Mock,Stub,Fake
- 解析 Golang 测试(3)- goconvey 实战
- 2023年11月(1)
- 2023年10月(1)
- 2023年3月(2)
- 2023年2月(1)
- 2022年12月(1)
- 2022年9月(13)
- 2022年8月(5)
- 2022年7月(9)
- 2022年6月(2)
- 2022年5月(2)
- 2022年4月(1)
- 2022年3月(2)
- 2021年12月(1)
- 2021年11月(14)
- 2021年10月(2)
- 2021年9月(111)
- 2015年3月(1)
- 2014年5月(4)
- 2014年4月(18)
- 2014年1月(1)
- 2013年11月(2)
- 2013年7月(1)
- 2013年6月(1)
- 2013年3月(13)
- 2013年2月(3)
- 2013年1月(1)
- 2012年12月(8)
- 2012年11月(8)
- 2012年10月(1)
- 2012年9月(13)
- 2012年8月(4)
- 2012年6月(2)
- 2012年5月(10)
- 2012年4月(13)
- 2012年3月(9)
- 2012年2月(8)
- 2011年11月(1)
- 2011年8月(9)
- 2011年7月(8)
- 2011年6月(8)
- 2011年5月(7)
- 2011年4月(19)
- 2011年3月(15)
- 2011年2月(8)
- 2011年1月(9)
- 2010年12月(2)
- 2010年11月(2)
- 2010年10月(2)
- 2010年9月(8)
- 2010年8月(9)
- 2010年7月(1)
- 2010年6月(9)
- 2010年5月(5)
- 2010年1月(7)
- 2009年12月(21)
- 2009年11月(29)
- 2009年10月(100)
- 2009年8月(1)
- 2009年7月(15)
- 2009年6月(52)