【发布时间】:2022-04-25 00:01:16
【问题描述】:
我们正在尝试针对使用 JaCoCo 的预打包 JAR 文件报告测试的代码覆盖率。为此,我们使用带有附加参数的 java -jar 启动 JAR 文件:
-javaagent:${project.basedir}/tools/jacocoagent.jar=output=tcpserver,port=${jacoco.port}
JaCoCo 的 Maven 插件被配置为然后转储执行文件并报告结果:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.0</version>
<executions>
<execution>
<id>dumpData</id>
<phase>post-integration-test</phase>
<goals>
<goal>dump</goal>
</goals>
<configuration>
<address>localhost</address>
<port>${jacoco.port}</port>
<destFile>target/jacoco.exec</destFile>
</configuration>
</execution>
<execution>
<id>report</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>target/jacoco.exec</dataFile>
</configuration>
</execution>
</executions>
</plugin>
这会产生一个jacoco.exec 文件,该文件具有非零大小(~350kB)。
但报告显示根本没有报道。在“会话”链接之后,我可以看到列出的 JAR 中的类,但报告的主页显示了这一点:
根据我们拥有的日志,代码似乎已被执行。 JaCoCo 设置中是否缺少步骤或者这应该有效吗?
【问题讨论】:
-
我不确定你想用
-javaagent实现什么。它应该从测试中得到覆盖——你读过baeldung.com/jacoco 吗?因此,在 Maven 构建期间,您正在运行测试并基于这些测试测量覆盖率。这是我所知道的典型用法...... -
我正在对已构建的 JAR 文件进行黑盒测试。我们正在启动一个 Spring Boot 应用程序并使用 HTTP 请求来访问它,我正在尝试测量它的代码覆盖率。不是典型的用法,但据我了解文档应该是可行的。也许我错了。
-
我没有这方面的经验,也许你可以看看carlosbecker.com/posts/production-code-coverage-jacoco ;-)
-
从 CLI 工具运行报告,将“--classfiles”指向 JAR,我得到一个异常“分析时出错 ....app.jar@BOOT-INF/lib/aopalliance -1.0.jar@org/aopalliance/aop/AspectException.class” - 看起来它无法处理 Spring Boot 打包类的方式。也许这就是为什么我的报告是空的。
-
有什么解决办法吗?
标签: java code-coverage jacoco jacoco-maven-plugin