基于 Dubbo RPC 的项目中有一个提供者项目backend、一个消费者项目gateway、以及注册中心nacos。本篇文章记录在windows本地对该框架的测试过程,以及介绍jacoco的基本原理
官网下载安装包解压到本地,https://www.jacoco.org/jacoco/

只需要用到jacoco/lib 文件夹中的 jacocoagent.jar 以及jacococli.jar 这两个文件
创建一个backend,gateway目录,把他们各自的jar包以及jacoco上面提到的两个jar包复制两份放到这两个文件夹里面

正常启动nacos以及自己的interface项目
在backend中开一个cmd运行命令:java -javaagent:jacocoagent.jar=includes=*,output=tcpserver,port=6300,address=localhost,append=true -jar yuapi-backend-0.0.1-SNAPSHOT.jar 此时backend项目被启动
在gateway中开一个cmd运行命令:java -javaagent:jacocoagent.jar=includes=*,output=tcpserver,port=6301,address=localhost,append=true -jar yuapi-gateway-0.0.1-SNAPSHOT.jar 此时gateway项目被启动
注意一个是6300端口,一个是6301端口,需要两个不一样的端口号
运行前端项目开始测试,或者使用postman,或者直接用Knife4j测试,测试完成后进行下一步
在backend中再开一个cmd(上一个可别管掉了啊)运行命令:java -jar jacococli.jar dump --address 127.0.0.1 --port 6300 --destfile jacoco-demo.exec 接着下一条命令:java -jar jacococli.jar report jacoco-demo.exec --classfiles D:\星球项目\yuapi-backend\target\classes --sourcefiles D:\星球项目\yuapi-backend\src\main\java --html html-report --xml report.xml --encoding=utf-8 --classfiles是本地项目classes所在的文件夹,–sourcefile是本地项目java所在的文件夹
此时jacoco\lib\backend\html-report会生成index.html,这就是backend代码覆盖率报告了

绿色表示刚刚的测试覆盖到的代码,随便点进去一个,在登录的imple里面,测试到的正常登录的代码都已经是绿色了

同样的方法来生成gateway的覆盖率报告:在gateway中再开一个cmd(上一个可别管掉了啊)运行命令:java -jar jacococli.jar dump --address 127.0.0.1 --port 6301 --destfile jacoco-demo.exec 接着下一条命令:java -jar jacococli.jar report jacoco-demo.exec --classfiles D:\星球项目\yuapi-gateway\target\classes --sourcefiles D:\星球项目\yuapi-gateway\src\main\java --html html-report --xml report.xml --encoding=utf-8 --classfiles是本地项目classes所在的文件夹,–sourcefile是本地项目java所在的文件夹
此时jacoco\lib\gateway\html-report会生成index.html,这就是gateway代码覆盖率报告了

可以看到过滤器里面的正常逻辑都被覆盖到了

以上介绍到了如何生成项目的测试覆盖率报告,接下来介绍一些理论知识
什么是单元测试覆盖度:
jacoco的原理
对于这段代码:
public static void example() {
a();
if (cond()) {
b();
} else {
c();
}
d();
左图是它对应的字节码,右图是插桩后的字节码,可以看到只在分支的出口处进行了插桩

jacoco命令:
1. java -javaagent:jacocoagent.jar=includes=*,output=tcpserver,port=6300,address=localhost,append=true -jar user-center-0.0.1-SNAPSHOT.jar
2. 开始测试
3. java -jar jacococli.jar dump --address 127.0.0.1 --port 6300 --destfile jacoco-demo.exec
4. java -jar jacococli.jar report jacoco-demo.exec --classfiles D:\javacode\user-center\user-center\target\classes --sourcefiles D:\javacode\user-center\user-center\src\main\java --html html-report --xml report.xml --encoding=utf-8
5. 查看覆盖率报告