使用quarkus-jacoco进行未使用@QuarkusTest注释的测试

问题描述 投票:0回答:2

根据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 进行单元测试。

谢谢

quarkus jacoco jacoco-maven-plugin junit-jupiter jacoco-plugin
2个回答
0
投票

Quarkus IO

正如文档所述,此设置仅在至少运行一个 @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 插件管理


0
投票

我也遇到了类似的问题,多亏了这篇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>
© www.soinside.com 2019 - 2024. All rights reserved.