Kotlin,Java 8 和声纳覆盖显示为 0
Kotlin, Java 8 and Sonar coverage showing as 0
我有一个使用 Java 8 的 kotlin 项目,我使用 Sonar 来测量代码覆盖率
我正在使用最新版本的 Sonar,并注意到由于 openjdk 的变化,覆盖率有所下降。我的测试使用 Mockito 和 PowerMockito。一些测试由于反射错误而失败。
当我添加以下 jvm args - 错误消失 - --add-opens java.base/jdk.internal.loader=ALL-UNNAMED
但是,如果我将 maven-surefire-plugin 添加到我的 pom.xml - 代码覆盖率在 Sonar
中显示为 0
我使用 Jacoco 来测量覆盖率 - 这是我的 pom.xml
的相关部分
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco-maven-plugin.version}</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
<argLine>--add-opens java.base/jdk.internal.loader=ALL-UNNAMED</argLine>
</configuration>
</plugin>
因此,如果我不包含 surefire 插件,我的声纳代码覆盖率会显示,但由于上述错误,一些测试会失败。
如果我包含 surefire 插件,我的所有测试都会通过,但我的代码覆盖率在声纳
中显示为 0
我正在使用以下命令 运行 我的测试和 Sonar 分析
mvn clean install -DskipTests=false -Dmaven.test.failure.ignore=true sonar:sonar
surefire 插件和 jacoco 插件是否可以共存,以便查看声纳的覆盖范围,或者人们可以提供任何进一步的建议吗?
通常,jacoco 和 surefire 插件必须正确“集成”,以便单元测试 运行 与 jacoco 代理。如果您不指定 surefire 插件,我很惊讶您会得到报道。我想必须有默认设置才能实现。在我看来,最好是明确的,这样就很清楚他们是一体的。
您的 jacoco 插件中可能应该包含以下内容:
<execution>
<id>pre-unit-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<propertyName>surefireArgLine</propertyName>
</configuration>
</execution>
并且以下是万无一失的:
<argLine>${surefireArgLine}</argLine>
如果您确实需要这些附加参数,只需将其添加到该值的末尾即可。
我有一个使用 Java 8 的 kotlin 项目,我使用 Sonar 来测量代码覆盖率 我正在使用最新版本的 Sonar,并注意到由于 openjdk 的变化,覆盖率有所下降。我的测试使用 Mockito 和 PowerMockito。一些测试由于反射错误而失败。
当我添加以下 jvm args - 错误消失 - --add-opens java.base/jdk.internal.loader=ALL-UNNAMED
但是,如果我将 maven-surefire-plugin 添加到我的 pom.xml - 代码覆盖率在 Sonar
中显示为 0我使用 Jacoco 来测量覆盖率 - 这是我的 pom.xml
的相关部分<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco-maven-plugin.version}</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
<argLine>--add-opens java.base/jdk.internal.loader=ALL-UNNAMED</argLine>
</configuration>
</plugin>
因此,如果我不包含 surefire 插件,我的声纳代码覆盖率会显示,但由于上述错误,一些测试会失败。 如果我包含 surefire 插件,我的所有测试都会通过,但我的代码覆盖率在声纳
中显示为 0我正在使用以下命令 运行 我的测试和 Sonar 分析
mvn clean install -DskipTests=false -Dmaven.test.failure.ignore=true sonar:sonar
surefire 插件和 jacoco 插件是否可以共存,以便查看声纳的覆盖范围,或者人们可以提供任何进一步的建议吗?
通常,jacoco 和 surefire 插件必须正确“集成”,以便单元测试 运行 与 jacoco 代理。如果您不指定 surefire 插件,我很惊讶您会得到报道。我想必须有默认设置才能实现。在我看来,最好是明确的,这样就很清楚他们是一体的。
您的 jacoco 插件中可能应该包含以下内容:
<execution>
<id>pre-unit-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<propertyName>surefireArgLine</propertyName>
</configuration>
</execution>
并且以下是万无一失的:
<argLine>${surefireArgLine}</argLine>
如果您确实需要这些附加参数,只需将其添加到该值的末尾即可。