代码覆盖率的统计指标

代码覆盖率指的是一种衡量代码覆盖程度的方式,通常会对以下几种方式进行统计分析:

  • 行覆盖。它又被称作语句覆盖或基本块覆盖。这是一种较为常用且具有代表性的指标,度量的是被测代码中每个可执行语句是否被执行到。
  • 条件覆盖。它度量的是当代码中存在分支时,是否能覆盖进入分支和不进入分支这两种情况。这要求开发人员编写多个测试用例以分别满足进入分支与不进入分支这两种情况。
  • 路径覆盖。它度量的是当代码中存在多个分支时,是否覆盖到分支之间不同组合方式所产生的全部路径。这是一种力度最强的覆盖检测,相对而言,条件覆盖只是路径覆盖中的一部分。

代码覆盖率 = 被测代码行数 / 参测代码总行数 * 100%。

Cobertura 通常会与 Maven 一起使用,POM 文件的基本结构
<project> <reporting> <plugins> <plugin><!-- 此处用于将 Cobertura 插件集成到 Maven 中 --> <groupId>org.codehaus.mojo</groupId><artifactId>cobertura-maven-plugin</artifactId><version>2.5.2</version> </plugin> </plugins></reporting>
</project>

单元测试代码编写完成,所有设置配制好后,在工程根目录运行“mvn cobertura:cobertura”Maven 就会对代码进行编译。编译完成之后,就会在项目中运行测试代码并输出测试报告结果到目录 project_base$\target\site\cobertura\index.html

过滤不需进行单元测试的包和类

针对项目中不需进行单元测试的包和类,我们可以利用 POM 文件中 Cobertura 的标注 (instrument) 设置,对相应的包和类进行剔除 (exclude) 或筛选 (include),使之不体现在覆盖率报告中,去除它们对整个覆盖率的影响,从而使报告更具针对性。其基本 POM 标签设置及解析如清单 3 中所示。

清单 3. POM 中剔除包和类的设置示例
<configuration> <instrumentation> <excludes> <!--此处用于指定哪些类会从单元测试的统计范围中被剔除 --><exclude>exs/res/process/egencia/Mock*.class</exclude><exclude>exs/res/process/test/**/*Test.class</exclude> </excludes></instrumentation> </configuration> <executions> <execution><goals> <goal>clean</goal> </goals> </execution></executions>

过滤类中的函数

这一版本中的 Cobertura 只能支持到类级别的过滤,而对于类中方法的过滤是不支持的。因此我们需要通过修改 Cobertura 源码,使 Cobertura 支持对类中方法的过滤。

原理是 : 修改 Cobertura-maven-plugin 项目中的 InstrumentationTask 类,增加 Ignoretrival,IgnoreMethod 等新增 POM 参数。配制正则表达式,修改 Cobertura 核心,在标注(instrumentation) 阶段遍历函数名时,检测函数名是否匹配传入的正则表达式,过滤函数体代码,从而把这些函数代码排除在代码覆盖统计之外,节省开发人员对这类代码的测试精力。

参考 使用 Cobertura 和反射机制提高 Java 单元测试中的代码覆盖率

配置 Cobertura 过滤掉无需测试代码相关推荐

  1. 使用Service Installer在.NET Core中配置依赖注入而无需任何代码

    目录 介绍 描述 在本文中,我将解释如何使用一个名为IServiceInstaller的接口,您可以在配置依赖注入时使用它,然后使用简单的反射代码自动读取它. 介绍 这是我们配置IServiceIns ...

  2. 抖音火爆的微信早安推送在线版,无需搭建代码,简单配置即可给心爱的他/她定时推送消息了

    抖音火爆的早安推送在线版,无需搭建代码,简单配置即可给心爱的他/她定时推送消息了 只需通过简单的配置,无需自己搭建代码环境,申请各种api,甚至保持电脑程序开机等.配置完成后,即可实现每天定时配送. ...

  3. What-If 工具:无需写代码,即可测试机器学习模型

    文 / Google AI 软件工程师 James Wexler 构建有效的机器学习 (ML) 系统需要提出许多问题.仅仅训练一个模型,然后放任不管,是远远不够的.而优秀的开发者就像侦探一样,总是不断 ...

  4. 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma

     1 PersonTestMapper.xml中的内容如下: <?xmlversion="1.0"encoding="UTF-8"?> < ...

  5. VS2019配置opencv详细图文教程和测试代码

    摘要: vs2019新鲜出炉,配置opencv又有哪些不一样呢,这个教程将会一步一步的教你如何配置opencv和跑动opencv一个简单的项目. 测试代码请在原文找到,转发备注原文链接:https:/ ...

  6. flinkCdc的mysql配置及java测试代码

    测试使用的是flinkCdc2.1.1版本(无锁同步,1.x版本有同步锁)目前支持mysql5.7及以上版本; 要在mysql.cnf中配置开启开启mysql的bin-log日志, log_bin=m ...

  7. opencv有基于c语言的教程吗_VS2019配置opencv详细图文教程和测试代码的实现

    摘要: vs2019新鲜出炉,配置opencv又有哪些不一样呢,这个教程将会一步一步的教你如何配置opencv和跑动opencv一个简单的项目. 环境: 系统:win10系统截至20190523版本 ...

  8. Ubuntu14.04下配置OpenGL及测试代码

    ubuntu14.04 64位下,默认是没有安装OpenGL相关依赖库的,若安装,则依次执行如下几条命令即可: $ sudo apt-get update $ sudo apt-get install ...

  9. log4j升级为log4j2(无需改动代码)

    log4j升级为log4j2(无需改动代码) 1 .删掉项目中存在的Log4j1.x的jar包,添加log4j2的jar包; 2.添加log4j和log4j2的连接包log4j-1.2-api-2.x ...

最新文章

  1. OpenCV 图像处理系列(6)—— 图像的几何变化
  2. Java项目:宿舍管理系统(java+jsp+SSM+Spring+mysql)
  3. android sdk 如何重新生成debug.keystore
  4. 嵌入式linux启动过程分析,嵌入式Linux裸机开发(二)——S5PV210启动过程分析
  5. 编辑器-Vim常用命令
  6. Delphi 2009 超前预知!
  7. c语言vbs,我的vbs整人程序
  8. lableimg闪退_CV学习笔记(二十五):数据集标注与制作
  9. python多进程之间的通信:消息队列Queue
  10. 阿里云毕龙飞:五个维度推进企业生产关系数字化
  11. Matlab机器学习和深度学习APP之Regression Learner
  12. OPNsense防火墙搭建实验环境,MSF与SSH进行流量转发
  13. mysql 2000_sql server 2000 下载
  14. java 解析dojo_Dojo入门三种HelloWorld!
  15. IDEA展示隐藏文件夹
  16. DZY Loves Math题解
  17. uniapp ios打包详细步骤
  18. Ubuntu系统迁移至固态硬盘(生产环境勿用)
  19. 清除目录下的SVN信息
  20. 用友通账套备份操作流程

热门文章

  1. 《MyBatis 从入门到精通》
  2. ajax提交表单序列化不进请求,表单序列化+ajax跨域提交
  3. PromQL 直方图 跟踪请求的延迟或响应大小 99%的请求是在多少延迟下完成的?
  4. wps分享为什么要登入_靠谱租分享:为什么要在年前租办公室
  5. k8s单节点无法启动pod
  6. 绵阳现在买房怕房价跌,不买又怕房价涨!到底是跌是涨?
  7. 蚂蚁借呗每月等额计算方式
  8. 如何利用小红书进行产品营销?小红书营销技巧有哪些?
  9. 名帖84 米芾 小楷《九歌》
  10. Keil5-MDK 使用编译步骤及异常与修改(生成axf文件和bin文件)