根据Quarkus文档,要让JaCoCo考虑未使用@QuarkusTest注释的测试类,我们唯一需要做的就是配置jacoco插件来执行目标prepare-agent。
我已经添加了这一点,与文档建议的相同:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<exclClassLoaders>*QuarkusClassLoader</exclClassLoaders>
<destFile>${project.build.directory}/jacoco-quarkus.exec</destFile>
<append>true</append>
</configuration>
</execution>
</executions>
</plugin>
尽管如此,我的单元测试还没有被考虑在内。
我的quarkus版本是2.10.3.Final,jacoco插件设置为0.8.8。
我使用 jupiter 5.8.2 进行单元测试。
谢谢
正如文档所述,此设置仅在至少运行一个 @QuarkusTest 时才有效。 jacoco 标准设置可能会解决您的问题。 在 Maven 构建日志中,您可以阅读如下两行:
[INFO] --- jacoco-maven-plugin:0.8.8:report (jacoco-report) @ project-name ---
[INFO] Skipping JaCoCo execution due to missing execution data file.
标准jacoco配置:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<destFile>${project.build.directory}/jacoco-quarkus.exec</destFile>
<append>true</append>
</configuration>
</execution>
</executions>
</plugin>
注意: 使用 @QuarkusTest 注释的标准配置测试不由 jacoco 插件管理
我也遇到了类似的问题,多亏了这篇post,我终于发现问题是由于覆盖
maven-surefire-plugin
argLine
配置造成的。
我最初在我的
pom.xml
中有这个配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<argLine>-Dfile.encoding=UTF-8 -XX:+EnableDynamicAgentLoading</argLine>
</configuration>
</plugin>
定义 jacoco
propertyName
并在 argLine
配置中引用它后,jacoco 正确报告了我的单元测试(用 @Test
注释)所覆盖的代码。
这是我的最终配置:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<exclClassLoaders>*QuarkusClassLoader</exclClassLoaders>
<destFile>${project.build.directory}/jacoco-quarkus.exec</destFile>
<append>true</append>
<propertyName>surefireArgLine</propertyName>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<argLine>${surefireArgLine} -Dfile.encoding=UTF-8 -XX:+EnableDynamicAgentLoading</argLine>
</configuration>
</plugin>