前言:
本来想快速搞定覆盖率这个的。随便搜了搜博客,想走捷径。
最终发现想弄懂,还是得看官网,才能把东西弄透。
(唉,读英文文档,总是会有点难度的啊。。。选中文博客,真的和玩狼人杀一样。。搜索完挨个试一试。。。
另外中文博客很少有把官方文档详细翻译,或者把东西说透彻的,也许有但不好搜得到。。。所以一个东西看了博客经常还是能跑就行,各种配置都不甚了解)
对于maven 插件。。。需要知道maven 构建的生命周期, 每个插件的 goal, 每个goal 所默认绑定的maven phase。 这个是深入了解所必须的。
跳坑经历(大概回忆一下):
最开始参考的大概是 https://www.jianshu.com/p/16e205b1d0d0
按博客里说的,往pom 里加了 jacoco-maven-plugin , goals 有两个:prepare-agent 和 report
以为就OK了。。结果,mvn clean test 报错, jacoco没有生成执行文件exec:
Skipping JaCoCo execution due to missing execution data file.
后面找了一圈参考这个博客,解决了。
https://blog.csdn.net/qq_34770694/article/details/123008841
大致意思就是,Surefire 配置破坏 JaCoCo 代理。 (argLine 默认会被surefire 覆盖了,所以jacoco要单独指定参数名)
然后,加入 maven-surefire-plugin 同时 在配置里加上了 <argLine>-Xmx256M ${jacocoArgLine}</argLine>
最后这两个插件的整体配置,大致如下:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<!-- <version>0.8.3</version> -->
<version>0.6.5.201403032054</version>
<configuration>
<includes>
<include>com/**/*</include>
</includes>
</configuration>
<executions>
<execution>
<id>pre-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<propertyName>jacocoArgLine</propertyName>
</configuration>
</execution>
<execution>
<id>post-test</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>target/jacoco.exec</dataFile>
<outputDirectory>target/jacoco-ut</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.9</version>
<configuration>
<argLine>-Xmx256M ${jacocoArgLine}</argLine>
<skip>false</skip>
<testFailureIgnore>false</testFailureIgnore>
<includes></includes>
<excludes>
<!-- 由于测试controller类需要启动auth应用进行登录请求,故剔除 -->
<exclude>**/controller/*ControllerTest.java</exclude>
</excludes>
</configuration>
</plugin>
主要的要点,就是 jacoco 其实是个生成 javaagent 代理才能统计到代码执行的覆盖率,而jacoco 本身是不管测试的。
surefire 才是跑测试的插件, 默认就包含在maven中,会执行所有 *Test.java 等测试。。。
所以这两个插件都需要配合使用。。。。
用 jacoco 插件生成 适当的 javaagent 参数,存放在 ${jacocoArgLine} 参数中,传递给 surefire 插件。
然后surefire 跑测试的时候,才能带上jacoco 的插桩参数。。。
相关资料参考:
讲的很全面,对单元测试 和 集成测试 分开了讲, 虽然初步看容易看不懂。。。因为配置太长了。。
https://juejin.cn/post/6844903999473188877
Stack Overflow 对于没有生成jacoco 的数据文件的原因
jacoco 官网,对 prepare-agent 这个goal的文档
https://www.eclemma.org/jacoco/trunk/doc/prepare-agent-mojo.html
jetty 启动如何使用 javaagent
标签:插件,覆盖率,surefire,agent,maven,https,jacoco,统计 From: https://www.cnblogs.com/tidus5/p/17429777.html