1. 本文根据Jacoco官方文档操作生成,具体请参考:
https://www.jacoco.org/jacoco/trunk/doc/agent.html
https://www.jacoco.org/jacoco/trunk/doc/cli.html
jacoco下载地址:
https://search.maven.org/remotecontent?filepath=org/jacoco/jacoco/0.8.7/jacoco-0.8.7.zip
2. Springboot项目运行时生成dump文件方法(on-the-fly模式,无需编写单元测试):
2.1 下载jacoco并解压:

2.2 IDEA中执行clean package,生成class文件和jar包,如图所示:

2.3 通过以下命令执行jar包启动:
java -javaagent:${ jacocoagent.jar的路径,在jacoco下的lib中}=includes=${ 要扫描的包路径,例如com.cosmoplat.*},output=tcpserver,port=6300,address=127.0.0.1 -jar ${你要执行的jar包}
例如:

参数解释:
-javaagent: 通过javaagent代理启动(java探针技术,可以理解为jvm的aop)
Includes: 要对哪些包进行覆盖检测,用分号(:)隔开, 支持通配符和?
excludes:不希望进行覆盖检测的包,同上;
address和port: jacoco用于输出执行数据,如果address为,则支持远程输出;
2.4 启动jar包后,通过swagger或者直接点击页面,执行对应的业务逻辑进而覆盖相应的代码;
2.5 生成exec文件(执行覆盖数据dump):
java -jar ${jacococli.jar的路径,在jacoco下的lib中} dump --address 127.0.0.1 --port 6300 --destfile ${生成的dump文件路径}
例如:

执行完成后会在你指定的路径生成一个exec文件,根据该文件可以生成覆盖报告。
2.6 根据exec文件生成覆盖率报告:
java -jar ${jacococli.jar的路径} report ${exec文件路径} --classfiles ${类文件路径} --sourcefiles ${源码文件路径,要到/src/main/java} --encoding utf-8 --html ${报告路径}
例如:

执行完成后,会在指定的路径生成报告:


2.7 合并多个exec文件生成覆盖率报告:
有时我们可能一次不能满足覆盖率要求,需要多次测试,在进行合并,则需要将多次执行生成的exec进行合并
java -jar jacococli.jar merge [<execfiles> ...] --destfile <path>
参数解释:
Jacococli.jar: 在jacoco下的lib路径中
Merge: 后面跟要合并的exec文件,多个
--destfile: 合并后的文件,要带名称
3. 单元测试使用jacoco:
以idea为例,如图所示,在运行参数中加入-javaagent配置即可,当单元测试运行完后,会在对应的文件夹下生成相应的dump文件。

4 推荐先使用on-the-fly模式,点击页面进行覆盖,如果不达标,针对未覆盖的逻辑单独编写单元测试,最后将生成的exec进行merge即可。
网友评论