1 为什么要关注测试覆盖率
覆盖率是程序编程的最后一环,单元测试验证代码,而覆盖率验证测试用例。
代码覆盖率常常被拿来作为衡量测试好坏的指标
开发关注覆盖率是为了更加深入的测试代码,不留死角,避免隐藏bug的出现
在对外说“代码很牛,没有bug”的时候,说服别人需要有数据
2 jacoco是什么
JaCoCo是一个开源的覆盖率工具(官网地址: http://www.eclemma.org/JaCoCo/ ),
它针对的开发语言是java。
实现:使用asm动态修改字节码,在代码中进行打桩,从而进行统计。
模式:插件模式、命令行模式
使用:1 执行测试用例的时候使用jacoco参数,会生成覆盖率分析文件。2 使用jacoco命令根据exec文件生成覆盖率报告。
数据指标:
指令级覆盖(Instructions,C0coverage)
分支(Branches,C1coverage)
圈复杂度(CyclomaticComplexity)
行覆盖(Lines)
方法覆盖(non-abstract methods)
类覆盖(classes)
3 怎样分析测试覆盖率
IDE方式、gradle、jenkins持续集成
IDE方式:IDEA内部实现了测试覆盖率的插件,使用方便
使用gradle插件
在目前的项目使用的是gradle构建工具,项目中使用了java、jacoco插件,tasks中有jacoco默认的任务jacocoTestReport。运行该任务的前提是要执行test任务,即要执行测试用例。
jenkins插件方式
先执行测试用例,再执行sonar静态分析,如果静态分析不通过,则本次构建失败;如果sonar通过,则jacoco分析.exec文件,得出覆盖率。
覆盖率文件(执行测试用例之后会生成)
class文件路径
java源文件路径(如果找不到,看不到具体的代码覆盖信息)
分析的java代码路径
排除的java文件
构建的指标(max、min)
构建失败指标
4 检测有意义的代码
检测的代码:
服务实现类
工具类
线程相关类
不用检测的代码:
entity类
数据库操作类
异常定义类
常量类
枚举
VO等
生成的代码
5 如何提升测试覆盖率
多写测试用例