SpringBoot-Jacoco单元测试覆盖率报告
SpringBoot-Jacoco单元测试覆盖率报告
添加Maven
添加测试依赖
<dependencies> <!--spring-boot测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
添加jacoco的配置和依赖
<!-- 自动查找主类 用于打包 和 jacoco的配置 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.1</version><executions><execution><id>prepare-agent</id><goals><goal>prepare-agent</goal></goals></execution><execution><id>report</id><phase>prepare-package</phase><goals><goal>report</goal></goals></execution><execution><id>post-unit-test</id><phase>test</phase><goals><goal>report</goal></goals><configuration><dataFile>target/jacoco.exec</dataFile></configuration></execution></executions></plugin></plugins></build>
编写单元测试类
package com;import com.baidu.HelloAppllication;
import com.baidu.controller.GradeClassController;
import com.baidu.service.GradeClassService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit4.SpringRunner;import java.util.List;@RunWith(SpringRunner.class)
@SpringBootTest(classes = HelloAppllication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class TestApp {@Autowiredprivate GradeClassService selectAllGradeSize;@Testpublic void show1(){List<String> list = selectAllGradeSize.selectGradeClassAssignGrade();System.out.println(list);}}
运行 Jacoco
在IDEA中右侧有Maven插件然后 点击install就行了,
如果使用的不是IDEA那么可以使用Maven的命令
mvn install
mvn jacoco:report //生成报告
然后jacoco就会运行一遍所有单元测试,然后生成单元测试报表
查看报告
进入项目 /target/site/ ,其下的整个 Jacoco-ut 都是报告相关内容,可以点击 index.html 进行具体查看
报表解释
在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。
Jacoco从多种角度对代码进行了分析,包括指令(Instructions,C0 Coverage),分支(Branches,C1 Coverage),圈复杂度(Cyclomatic Complexity),行(Lines),方法(Methods),类(Classes)。
1. Instructions
Jacoco计算的最小单位就是字节码指令。指令覆盖率表明了在所有的指令中,哪些被指令过以及哪些没有被执行。这项指数完全独立于源码格式并且在任何情况下有效,不需要类文件的调试信息。
2. Branches
Jacoco对所有的if和switch指令计算了分支覆盖率。这项指标会统计所有的分支数量,并同时支出哪些分支被执行,哪些分支没有被执行。这项指标也在任何情况都有效。异常处理不考虑在分支范围内。
在有调试信息的情况下,分支点可以被映射到源码中的每一行,并且被高亮表示。
红色钻石:无覆盖,没有分支被执行。
黄色钻石:部分覆盖,部分分支被执行。
绿色钻石:全覆盖,所有分支被执行。
3. Cyclomatic Complexity
Jacoco为每个非抽象方法计算圈复杂度,并也会计算每个类,包,组的复杂度。根据McCabe1996的定义,圈复杂度可以理解为覆盖所有的可能情况最少使用的测试用例数。这项参数也在任何情况下有效。
4. Lines
该项指数在有调试信息的情况下计算。因为每一行代码可能会产生若干条字节码指令,所以我们用三种不同状态表示行覆盖率
红色背景:无覆盖,该行的所有指令均无执行。
黄色背景:部分覆盖,该行部分指令被执行。
绿色背景:全覆盖,该行所有指令被执行。
5. Methods
每一个非抽象方法都至少有一条指令。若一个方法至少被执行了一条指令,就认为它被执行过。因为JaCoco直接对字节码进行操作,所以有些方法没有在源码显示(比如某些构造方法和由编译器自动生成的方法)也会被计入在内。
6. Classes
每个类中只要有一个方法被执行,这个类就被认定为被执行 ,有些没有在源码声明的方法被执行,也认定该类被执行。
可以点击进入,红色没有覆盖,绿色覆盖了
点赞 -收藏-关注-便于以后复习和收到最新内容 有其他问题在评论区讨论-或者私信我-收到会在第一时间回复 如有侵权,请私信联系我 感谢,配合,希望我的努力对你有帮助^_^
SpringBoot-Jacoco单元测试覆盖率报告相关推荐
- 基于Jacoco+Maven+Jenkins配置的单元测试覆盖率报告实践
最近,系统重构,要求对底层基础服务加入单元测试用例,而我被安排产出单元测试覆盖率报告. 第一版比较简单,只是一个简单的测试报告,并无具体覆盖率 1. 针对maven项目,pom配置 <repor ...
- 生成jacoco报告_测开技能之如何利用ant jacoco 合并覆盖率报告
在之前的文章,利用JaCoCo统计接口测试中代码覆盖率 和 ant+Jacoco 统计tomcat远程部署后项目接口自动化测试或者功能测试代码覆盖率 文章中介绍了如何获取测试代码的覆盖率,但是我们 ...
- Java变更行单元测试覆盖率
概述 Java应用代码的单元测试覆盖率工具Jacoco已经非常成熟及完善了.对于历史的Java项目很多都是没有单元测试的,往往在新的在迭代的过程中都希望能有变更代码行的单元测试覆盖率,从而提高迭代质量 ...
- Jenkins 进阶篇 - 单元测试覆盖率
我们做项目开发,肯定免不了要写单元测试,不管是 Java 项目.Python 项目.PHP 项目,甚至是 nodejs 项目,都应该要写单元测试,本小节就来介绍单元测试的覆盖率报告输出和展示,在后面的 ...
- Springboot 单元测试结合Jacoco收集单元测试覆盖率
目录 单元测试 Junit 简单例子 mockito Mock 的限制 Powermock maven 引入 注解使用 处理私有方法 mock构造函数 结合Springboot一起使用 各种runne ...
- jacoco测试代码覆盖率_使用Jacoco测量多模块Android项目中的单元测试覆盖率:第2部分
jacoco测试代码覆盖率 In the first article, we discovered one of the two key Gradle commands which come with ...
- sonar集成jacoco展示单元测试覆盖率
(一)sonar-scanner结合jacoco 这里还是要用到maven生成jacoco的统计结果,所以推荐直接使用maven的方式检查项目 1.在要检测的项目的pom文件中加入如下配置: < ...
- SonarQube 8.3.x中的Maven项目的测试覆盖率报告
几年前,我写了一篇博客文章,介绍如何在SonarQube中生成测试报告,该报告独立于单元测试和集成测试的测试报告中. 从SonarQube 6.2开始,测试报告不再在这些类别中分开(请参阅SonarQ ...
- jacoco统计覆盖率最佳实践
jacoco统计覆盖率最佳实践 jacoco总结 Jacoco安装 代码覆盖率介绍 行覆盖 分支覆盖 方法覆盖 覆盖率的误区 代码覆盖率意义 覆盖率报告解析 启动jacoco agent进行插桩 ** ...
最新文章
- 火爆全网,却只有4页!ICLR爆款论文「你只需要Patch」到底香不香?
- 《Science》评选2017年十大科学突破,看看有哪些吧!
- linux能安装音乐软件吗,Linux上如何安装使用音乐软件SoundCloud
- Intellij Idea:导入Gradle项目 - 尚未定义JAVA_HOME
- linux内核竞争条件漏洞,Linux内核竞争条件漏洞-导致远程代码执行
- 开发步骤 采用restful接口开发的开发步骤
- python中str和int区别_Python中的string方法和str方法有什么区别?
- Makefile中的wilcard函数
- Keras序列模型学习
- Kafka消息序列化和反序列化(上)
- 硬核,这个充电宝居然烧煤气!
- springboot使用ImportBeanDefinitionRegistrar 动态注册bean
- 第一次作业之成员介绍
- python网络爬虫系列(八)——常见的反爬手段和解决方法
- 小米8劲敌来了!同是骁龙845,它降价幅度更大
- VM10虚拟机安装图解
- 下载应用 ipa 包,不妨试试这款开源工具
- socket通信压力测试
- 科学家被称为计算机之父,被称为“计算机之父”,他超前的思维揭开计算机处理信息的本质!...
- HashMap是线程安全的吗?有什么线程安全的方法
热门文章
- 笔记62 | 个人项目“易来”开发记录《一》实现号码测凶吉功能模块
- Day 18:SequenceInputStream、合并切割mp3、对象输入输出流对象
- 解决任务管理器被禁用
- c语言5v电源电路工作原理,TCL王牌PWL4201C电源板工作原理介绍
- python3从零学习-5.5.4、xdrlib — 编码与解码 XDR 数据
- 什么是网络安全?网络安全心得体会
- 核心机密数据与文件如何保护
- weui获取checkbox选中值 带GIF效果演示
- 【途牛旅游项目】01 - 项目环境准备,实现登录功能
- 【智能制造】80页PPT给大家讲清楚工业4.0和智能制造