Jacoco 代码覆盖率库概述
Jacoco 是一个开源的 Java 代码覆盖率库,遵循 Eclipse 公共许可证发布。它通常用于测量 Java 项目中的单元测试或集成测试的覆盖率,但也可以通过 Jacoco 代理测量运行中应用程序的任何测试覆盖率。
使用 Jacoco 的步骤
下载和配置:
- 从 Jacoco 官网 下载最新版本的 zip 文件并解压。
- 将 lib 目录中的 jacocoagent.jar 和 jacococli.jar 文件放置在项目的根目录或其他已知目录。
示例应用:
- 使用一个简单的 Spring Boot 控制器类来演示 Jacoco 代理的使用。该控制器包含一个 GET 和一个 POST 端点。
启动应用并附加 Jacoco 代理:
使用以下命令启动 Java 应用并附加 Jacoco 代理:
java -javaagent:jacocoagent.jar=destfile=target/jacoco.exec,append=false, includes=com.example.* -jar target/jacoco-agent-0.0.1-SNAPSHOT.jar- 其中,
destfile参数指定覆盖率结果文件,append=false表示每次启动应用时重新创建该文件,includes=com.example.*用于仅测量示例项目的覆盖率。
测试应用:
- 通过浏览器或命令行测试应用的
/car端点,覆盖率文件target/jacoco.exec会在应用停止时自动写入。
- 通过浏览器或命令行测试应用的
生成可读的覆盖率报告:
使用 Jacoco 的命令行接口工具将覆盖率文件转换为 HTML 页面或 XML 报告:
java -javaagent:jacocoagent.jar=destfile=target/jacoco.exec,append=false, includes=com.example.* -jar target/jacoco-agent-0.0.1-SNAPSHOT.jar- 生成的 HTML 报告可以在浏览器中查看,XML 报告可以导入 SonarQube 等工具。
覆盖率报告分析
- 总体覆盖率:通过浏览器打开 index.html 文件,可以查看应用的总体代码覆盖率。
- 类级别覆盖率:点击 com.example 包,可以查看应用中各个类的覆盖率。
- 方法级别覆盖率:点击具体类(如
CarRestController),可以查看该类中每个方法的覆盖率。 - 代码行覆盖率:点击具体方法,可以查看该方法的代码行覆盖率。例如,
addCar()方法由于未发送 POST 请求,未被覆盖。
Jacoco 代理的应用场景
- 系统测试覆盖率:可以用于测量系统测试、性能测试、功能测试等的覆盖率。
- 检测死代码:通过功能测试覆盖率,可以识别潜在的未使用代码。
- 第三方库覆盖率:测量外部库、框架甚至 Java 本身的代码覆盖率,帮助评估其实际使用情况。
- 用户交互覆盖率:在验收或生产环境中测量真实用户交互的代码覆盖率,但可能会影响应用性能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。