1 简介
单元测试是保证代码质量的重要一环,而如何衡量单元测试写得好不好呢?覆盖率(Coverage)
是一个重要指标。而JaCoCo
则是专门为Java
提供的用于检测测试覆盖率的工具,英文全称为Java Code Coverage
。
本文将讲解如何在Maven
项目中整合JaCoCo
,并在SonarQube
中展示。SonarQube
的安装可以参考这篇文章:
《Docker搭建代码检测平台SonarQube并检测maven项目》
2 基本概念
这里所讲的覆盖率
是指测试代码的覆盖率,这个指标有多种计算方式,如下是比较常用的有:
行覆盖率:执行代码行数 / 总代码行数,判断有多少行代码被测试执行;
类覆盖率:执行的类 / 代码中类总个数;
分支覆盖率:执行的逻辑分支数 / 总的分支数,一般用于检测是不是
lf/else
都有测试覆盖;方法覆盖率:执行的方法数 / 代码总方法数,检测是否有方法被遗漏,构造方法也看作为方法。
圈复杂度:用于判断代码结构的复杂程序,
JaCoCo
不考虑异常处理的分支;一般认为圈复杂度大于10,就存在比较大的风险,严格要求不可大于15。
颜色标识:
JaCoCo
会通过颜色来标识代码覆盖情况,使其一目了然。红色表示没有覆盖,绿色表示已经覆盖,黄色表示部分覆盖。
执行方式:
执行JaCoCo
有多种方式:
(1)直接通过命令执行:https://www.eclemma.org/jacoco/trunk/doc/agent.html
(2)Ant执行:https://www.eclemma.org/jacoco/trunk/doc/ant.html
(3)Maven执行: