当前位置:网站首页>还在担心漏测吗?快来使用jacoco统计下代码覆盖率
还在担心漏测吗?快来使用jacoco统计下代码覆盖率
2022-06-24 15:32:00 【码同学软件测试】
大家日常工作过程中,不论是开发还是测试都有可能会被要求写单元测试用例,但是单元测试用例写得好不好如何衡量呢?一般都需要借助工具来统计单元测试用例覆盖了多少业务代码、算法代码,覆盖率高的情况下,比如覆盖率达到70%,交付给功能测试、接口测试、性能测试人员前代码的质量相对高很多,java代码一般可借助统计覆盖率的工具有哪些呢?例如jacoco、Emma,本文拿jacoco来说明写单元测试用例时如何提供覆盖率。
首先我们需要知道jacoco是如何统计单元测试覆盖率的呢?
书籍以及官网中提到很多理论知识,对于初学者来说经常有云深不知处的赶脚,
下面我通过常用的测试思路以及样例的形式给大家展示jacoco在Class%、Method%、Line%、Branch%这四个维度统计的覆盖率和测试用例的对应关系。
环境准备
代码环境准备步骤拆解如下2个步骤。
1,新建maven项目
注意:本人使用如下版本Idea2020.1。其他版本操作步骤可能会有差别。
idea界面中,依次单击菜单项 “File” > “New” > “Project”。
在弹出的“New Project”窗口中,点选左侧“Maven”节点,中部上部区域勾选“Create from archetype”前的勾选框,选取列表中的如下模板“org.apache.maven.archetypes:maven-archetype-quickstart”,读者可以根据自己需求选择其他模板,然后单击【Next】。
然后在弹出的“New Project”新窗口中,在“Name”文本框中输入maven项目名称,在“GroupId”文本框输入项目公司的域名,然后单击【Next】。

然后在弹出的“New Project”新窗口中,在“User settings file”以及“Local repository”分别设置maven配置文件以及本地仓库路径,然后单击【Finish】。
然后等待依赖软件下载完毕。
如下截图是下载完毕后的idea界面截图。

2,准备待测试的代码
使用quickstart模板自动新建的App类,在该类中新建add类,详见如下截图所示,简单的实现了两数相加功能。

测试用例为空的情况下
jacoco覆盖率统计
双击选中App类,然后按组合快捷键(windows环境)【Ctrl+Shift+t】,在弹出小窗口中,单击“Create New Test ”

在弹出的“Create Test”窗口中,在Testing library下拉框中点选“JUnit4”,勾选“setUp/@Before”前的单选框,勾选add方法前的勾选框,单击【OK】

然后自动生成App类的测试类AppTest,单击Add Configurations。
在“Run/Debug Configurations”窗口中,点窗口右侧“Templates”下三角图标按钮,
单击选中JUnit模板,单击"Create configuraion"。
然后Name文本框中给模板设置名称,Test kind设置all in package,Package下拉框指定测试包,Search for tests点选“In whole project”,然后单击“Code Coverage”选项页。Choose coverage runner下拉框选择Jacoco,单击【OK】,至此完成运行调试配置。这样运行测试用例时,覆盖率统计就使用Jacoco了
然后按照如下截图所示,按照覆盖率的方式运行测试类。

通过如下运行结果可见,测试类没有实现测试方法的情况下,统计出来的覆盖率指标均为0。

测试用例只有待测试类对象的情况下
jacoco覆盖率统计
测试用例中只有被测试类对象情况下,统计出来的Class%类覆盖率为100%,
因为当前项目中只有一个类App,该类对应测试类AppTest中测试用例有被测试类定义对象的情况下,因此计算出Class%类覆盖率为100%;
统计出来的Line%类覆盖率为50%,总行数为2行覆盖其中的1行。

总行数2行是如何得来的呢?我们删除App类中的add方法,再次执行覆盖测试。
从运行结果可以得出统计总行数是按照包含字符串的行作为行统计单位,
public class App被统计到总行数中,左右花括号没有被统计到总行数中。

当App被测试类中增加add方法定义后,统计结果如下所示,
这次统计总行数数时包括类名定义,方法名定义这2行,因此总行数变成2行。

当App被测试类增加add方法返回值后,统计结果如下截图所示,
这次统计总行数仍然是2行,包括类名定义,方法名定义这2行,不包括返回值这行。

当App被测试类add方法中增加2行打印输出语句后,统计结果如下截图所示,
这次统计总行数是4行,包括类名定义,方法名定义这2行,以及打印输出这2行,不包括返回值这行。

测试用例调用App类方法的情况下
jacoco覆盖率统计
当测试用例中增加App类方法add方法调用情况下,统计Line覆盖率为100%,Class、Method、Branch覆盖率也是100%。


当App类增加sub方法如下,我们再次执行覆盖测试,这次统计Method总方法数包括App被测试类中的2个方法add、sub,测试用例仅调用了add方法,因此统计出来的Method覆盖率为50%;Branch统计总的分支数为2个,是sub方法中的if分支(虽然没有写else)统计为2个分支;


当测试用例中增加调用App类的sub方法中的一个分支情况时,覆盖测试运行结果如下,这次统计出来的Branch分支覆盖率为覆盖App类的sub方法两个分支中的if分支,因此Branch覆盖率变成50%;
Line%覆盖率为7行中的6行,

是分支语句中的return行都作为行统计到总行数中吗?我们可以再增加sub方法调用else分支的情况来进行验证,从覆盖率运行结果来看,证明分支语句中的return行都作为行统计到总行数,这跟没有分支情况是有区分的。

可见通过jacoco统计单元测试覆盖率时,Class%是按照设定的包所在范围统计该包下的类总个数以及测试用例覆盖类个数的占比;Method%统计的是类方法的总个数以及测试用例调用类方法的占比;Line%统计的是类中代码行数以及测试用例调用类中的类、方法等行数的占比;而Branch统计的是类方法总分支数和测试用例调用分分支个数的占比。
边栏推荐
- Easynvr has been connected to the third-party supervision platform. How to achieve local Internet access
- practice
- Very exciting! 12000 words summarized the theory of network technology, reviewing the old and learning the new
- Use dictionary
- Typescript raw data type
- One article to get UDP and TCP high-frequency interview questions!
- 常见的缺陷管理工具——禅道,从安装到使用手把手教会你
- 左手代码,右手开源,开源路上的一份子
- 期货公司开户安全吗
- Working with collections
猜你喜欢
![[bitbear story collection] June MVP hero story | technology practice collision realm thinking](/img/b7/ca2f8cfb124e7c68da0293624911d1.png)
[bitbear story collection] June MVP hero story | technology practice collision realm thinking

FreeRTOS新建任务不执行问题解决办法

Do you really know the difference between H5 and applet?

设备通过国标GB28181接入EasyCVR平台,出现断流情况该如何解决?

He is also a junior test engineer. Why is his salary high? The interview must be brilliant at these points

Bert whitening vector dimension reduction and its application

leetcode. 12 --- integer to Roman numeral

Brief discussion on the implementation framework of enterprise power Bi CI /cd

左手代码,右手开源,开源路上的一份子

ES mapping之keyword;term查詢添加keyword查詢;更改mapping keyword類型
随机推荐
时间同步业务的闭环管理——时间监测
Chaos mesh in Tencent -- Tencent mutual entertainment chaotic engineering practice
一个简单而功能强大的开发者工具箱Box3.cc
Attacked! Cloud development monitoring alarm practice
Wide measuring range of jishili electrometer
R语言实战应用精讲50篇(二十三)-贝叶斯理论重要概念: 可信度Credibility, 模型Models, 和参数Parameters
Do you really know the difference between H5 and applet?
Application of motion capture system in positioning and mapping of mobile robot in underground tunnel
Which securities company is better and safer for great wisdom to choose when opening an account
股票开户要找谁?在线开户安全么?
期货公司开户安全吗
VIM common shortcut keys
Typescript raw data type
09_ An efficient memory method
Cloud + community [play with Tencent cloud] essay solicitation activity winners announced
List of PostgreSQL
中国十大证券app排名 炒股开户安全吗
CVPR2022 | 可精簡域適應
ES mapping之keyword;term查询添加keyword查询;更改mapping keyword类型
Bert whitening vector dimension reduction and its application