一、代码覆盖率理解
代码覆盖(Code coverage)是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率。
简单来理解,就是单元测试中代码执行量与代码总量之间的比率。
Java常用的单元测试覆盖率框架有:JaCoCo、EMMA和Cobertura,本篇文章主要介绍JaCoCo的使用。
二、JaCoCo理解
JaCoCo官方文档:https://www.eclemma.org/jacoco/trunk/doc/index.html
JaCoCo应该为基于Java VM的环境中的代码覆盖率分析提供标准技术。重点是提供一个轻量级,灵活且文档齐全的库,以与各种构建和开发工具集成。
产品定义
1.功能特征:
- 指令(C0),分支(C1),行,方法,类型和循环复杂度的覆盖率分析
- 基于Java字节码,因此无需源文件也可以工作
- 通过基于 Java-agent 的即时检测进行简单集成。其他集成方案(例如自定义类加载器)也可以通过API来实现
- 与框架无关的:与基于Java VM的应用程序(如纯Java程序,OSGi框架,Web容器或EJB服务器)平滑集成
- 与所有已发布的Java类文件版本兼容
- 支持不同的JVM语言
- 几种报告格式(HTML,XML,CSV)
- 远程协议和JMX控制可在任何时间点从coverage agent请求执行数据dump
- Ant任务,用于收集和管理执行数据并创建结构化的覆盖率报告
- Maven插件可收集覆盖率信息并在Maven构建中创建报告
非功能特征:
- 简单的用法以及与现有构建脚本和工具的集成
- 良好的性能和最小的运行时开销,尤其是对于大型项目
- 轻量级实现,对外部库和系统资源的依赖性最小
- 全面的文档
- 完整记录的API(JavaDoc)以及与其他工具集成的示例
- 基于JUnit测试用例的功能全面的回归测试
2. JaCoCo集成
JaCoCo集成主要包括JaCoCo/EclEmma 项目提供的集成和第三方集成
1)JaCoCo/EclEmma 项目集成
2) 第三方集成