静态接入和动态接入
SpingBoot能够通过2种方法接入JaCoCo:Maven和Agent。Maven方法是静态接入,在编译时核算代码覆盖率。Agent方法是动态接入,服务启起来今后,能实时依据代码命中状况核算代码覆盖率。
教程代码已上传开源项目:github.com/dongfanger/…
Maven
pom.xml增加依靠:
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.7</version>
</dependency>
增加装备:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${project.parent.version}</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.7</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
点击maven的install:
target/site/jacoco
目录下就生成了覆盖率报告:
Agent
下载jacoco文件后解压,提取2个文件:
运用指令发动SpringBoot,发动参数增加-javaagent
:
java -javaagent:jacoco/jacocoagent.jar -jar target/mini-0.0.1-SNAPSHOT.jar
此刻会生成1个jacoco.exec
文件,这个文件便是覆盖率数据文件,采用以下指令依据数据文件生成HTML报告:
java -jar jacoco/jacococli.jar report jacoco.exec --classfiles ./target/classes/ --sourcefiles ./src/main/java/ --html ./report
接下来就来验证动态特性。把report目录和jacoco.exec
都删了,由于jacoco每次部署只能剖析一次。把服务停掉后,重新发动。这一次不直接剖析,而是先用postman调一下接口:
能够看到覆盖率变成100%,阐明postman调接口这个操作,命中了代码,被jacoco计算到了。javaagent适当于是个署理,在服务运行期间,所有调用都会经过javagent,这样就能实时计算代码覆盖率。换句话说,只要服务运行起来今后,只要你能命中代码,无论是跑单元测验仍是调接口,或者是手工测验,都能生成代码覆盖率数据。