大家日常工作过程中,不论是开发还是测试都有可能会被要求写单元测试用例,但是单元测试用例写得好不好如何衡量呢?

一般都需要借助工具来统计单元测试用例覆盖了多少业务代码、算法代码,覆盖率高的情况下,比如覆盖率达到70%,交付给功能测试、接口测试、性能测试人员前代码的质量相对高很多,java代码一般可借助统计覆盖率的工具有哪些呢?例如jacoco、Emma,本文拿jacoco来说明写单元测试用例时如何提供覆盖率。

首先我们需要知道jacoco是如何统计单元测试覆盖率的呢?

书籍以及官网中提到很多理论知识,对于初学者来说经常有云深不知处的赶脚,下面我通过常用的测试思路以及样例的形式给大家展示jacoco在Class%、Method%、Line%、Branch%这四个维度统计的覆盖率和测试用例的对应关系。

01、环境准备

代码环境准备步骤拆解如下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类,详见如下截图所示,简单的实现了两数相加功能:

02、测试用例为空的情况下

双击选中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

03、只有待测试类对象的情况下

测试用例中只有被测试类对象情况下:

统计出来的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行,不包括返回值这行

04、调用App类方法的情况下

当测试用例中增加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统计的是类方法总分支数和测试用例调用分分支个数的占比。

下面是测试资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:伤心的辣条 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

还在担心漏测吗?快来使用jacoco统计下代码覆盖率相关推荐

  1. 【网络安全】还在担心网络诈骗?让OneDNS替你揽下一切

    目录

  2. 还在担心快应用没流量?全场景新玩法来袭!

    2019年3月20日,TEF·2019快应用开发者大会在北京圆满收官落下帷幕.本次大会宣布中国移动终端公司.海信手机加入快应用生态平台,并介绍了快应用生态潜力.快游戏布局.智能场景新玩法.第三方服务战 ...

  3. 如何看待测试过程中的漏测发生

    漏测,相信对于每个测试同学而言,都是"谈虎变色"的事,但是实际工作中,我们稍有不谨慎便会和它来一次"亲密接触".那么,现在我们一起来聊聊测试中的漏测. 漏测可能 ...

  4. 缺陷漏测分析:测试过程改进

    一.漏测的定义 所谓漏测,是指软件产品的缺陷没有被测试组发现而遗漏到了用户那里,却最终被用户所发现.如果产品在用户那里出现问题,产生的后果是非常严重的.在软件开发过程中,缺陷越早被发现,发现和解决缺陷 ...

  5. 测试人员如何做不漏测?这7点就够~

    Q.什么是漏测?具体的说,什么是测试漏测? A. 测试漏测是指软件产品在测试结束后出现了在测试过程中没有被发现的bug.我们知道,漏测是每一个软件测试者最头疼的事,一旦出现漏测, 首先给客户带来了非常 ...

  6. 我是如何有效的避免测试漏测?

    漏测,指在产品缺陷在测试过程中没有被发现(尤其是测试环境可以重现的缺陷),而是在版本发布后或者在用户使用后发现并反馈回来的缺陷.可以说,漏测的问题是测试管理者最头痛的问题.因为出现漏测,一来给客户带来 ...

  7. 测试面试话题5: 如何不漏测

    不漏侧这个话题本身就是个伪命题,微软的产品都天天打补丁呢,包括google, facebook都经常打补丁.测试人员是没有办法保证不漏侧的,但是尽可能少漏测,而且每次保证漏测的原因都是不一样的. 不漏 ...

  8. 移动app测试之怎么避免bug漏测

    下面分析出现缺陷漏测情况所采取的措施: 对需求评审阶段,对业务需求细节理解不明确,未深入挖掘隐含拓展需求: 改进措施 需求评审前,我们应该先仔细阅读prd及交互文档,先形成自己对产品的思考,通过脑图的 ...

  9. 你还在担心开车看不到路标吗?我这这有个路标分类的来玩玩啊(有源码有数据集)

    你还在担心开车看不到路标吗? 别看美女看路标 我这有个路标检测分类的小项目日后成型后肯定可以帮你看清路标哦.(我知道开车不看美女就能看到路标,但我偏偏要放一个美女啊 嘿嘿

最新文章

  1. 【WPF/C#】测试下载文件(图片)
  2. ubuntu安装tomcat7
  3. Unity Web前端研究
  4. 【图像隐写】基于matlab FFT数字水印嵌入【含Matlab源码 1670期】
  5. windows idea Tomcat端口被占用
  6. python实现isprime函数、参数为整数、要有异常处理_Python期末复习题1
  7. SQL Server查询语句
  8. ubuntu18.04 安装惠普打印机驱动和GUI界面
  9. 神经网络模型学习笔记(ANN,BPNN)
  10. DataStructuresAndAlgorithm--字谜游戏
  11. ETR获取转速及PID调节原则
  12. 计算机网络基础冷知识,技术控必备冷知识
  13. 在记事本中无限循环_意外空间:比恐怖游轮更无解的循环迷宫
  14. 如何设置浏览器信任局域网的网站证书
  15. Python每日一练:最长递增区间狄杰斯特拉(80分)K树(0分)
  16. 7款产品解决宠物主人头痛的问题
  17. win10系统安装与双系统ubuntu深度学习环境配置
  18. 你是否清楚,什么是真正的八拜之交?
  19. 蓝魔RM970升级为2.4
  20. 征途2s 服务器文件,征途2 经典专区28日服务器重组公告

热门文章

  1. Oracle sql给一列赋值,简单的Oracle变量SQL赋值
  2. iis服务器发布web项目,webservice创建、发布及在IIS上部署
  3. mysql jdbc 事务隔离级别_JDBC事务隔离级别,看完这篇文章就够了!
  4. QT禁用“最大化按钮“和“禁止调节窗口大小“
  5. #define、typedef与const
  6. 天价部队到老家赶来java作文_天价与廉价作文800字
  7. html展开显示样式,html a title 自定义样式显示
  8. 解决window资源管理器打开无法删除文件
  9. Vue2学习小记-给Vue2路由导航钩子和axios拦截器做个封装 1
  10. LeetCode.004 Median of Two Sorted Arrays