Java 8 到 Java 17 的迁移 + pitest 失败 - 突变测试需要绿色套件

Java 8 to Java 17 migration + pitest failing - Mutation testing requires a green suite

提问人:RagaSGNur 提问时间:2/4/2023 更新时间:2/8/2023 访问量:1623

问:

最近,该项目已从 Java8 迁移到 Java17。还检查了项目的突变测试覆盖率,在迁移之前,在 mvn clean install org.pitest:pitest-maven:mutationCoverage 的命令运行期间没有已知问题

迁移后,问题报告为目标 org.pitest:pitest-maven:1.7.6:mutationCoverage 失败:6 个测试没有 t 在计算线路覆盖率时无突变。突变测试需要一个绿色套件。

pom.xml 文件具有

<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>1.6.2</version>
<dependencies>
<dependency>
<groupId>org.pitest</groupId>
<artifactId>pitest-junit5-plugin</artifactId>
<version>0.12</version>
</dependency>
</dependencies>
</plugin>

注意:很少有测试用例包含 Whitebox.invokeMethod 来调用私有方法。在测试用例的运行过程中没有问题 - mvn 全新安装。 实际问题发生在使用命令运行 mutation test coverage 期间 - mvn clean install org.pitest:pitest-maven:mutationCoverage

我试图在pom.xml文件中包含选项--add-opens java.base/jdk.internal.misc=ALL-UNNAMED,但没有用。

<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>
--add-opens java.base/jdk.internal.misc=ALL-UNNAMED
</argLine>
</configuration>
</plugin>

我试图将 pitest-maven 的版本从 1.6.2 更改为 1.7.3,将 pitest-junit5-plugin 的版本从 0.12 更改为 0.15。这也没有用。

在测试用例中使用 WhiteBox.invokeMethod 克服 Java17 中的 pitest-maven 的任何想法或建议。

Maven junit5 java-17 pitest

评论

1赞 khmarbaise 2/4/2023
您必须将 pitest 升级到最新版本 (1.11.0),并将 pitest-junit5-plugin 升级到 1.1.2 search.maven.org/search?q=org.pitestsearch.maven.org/artifact/org.pitest/pitest-junit5-plugin/1.1.2/... 此外,运行测试就足够了,它足以使用 而不是mvn clean verifymvn clean install
0赞 RagaSGNur 2/4/2023
在设置到最新版本后,在 pitest 覆盖期间报告了相同的问题 - mvn clean install org.pitest:pitest-maven:mutationCoverage
2赞 henry 2/4/2023
如果启用 pitest 的详细日志记录(mvn -Dverbose=true 或更新 pitest 配置),它会将失败测试的名称写入日志。输出还将包含运行测试时遇到的错误的详细信息。另外,请注意,要使用的 pitest-junit5-plugin 版本取决于您使用的 pitest 版本和 junit 5 的版本(根据插件的自述文件 github.com/pitest/pitest-junit5-plugin)。
1赞 khmarbaise 2/4/2023
了解您正在使用的 surefire 插件版本也很有帮助,正如 @henry 已经提到的,junit-jupiter 的版本,整个 pom 文件在这里会有所帮助......并且所有测试运行都没有 pitest 任何问题吗?
0赞 RagaSGNur 2/6/2023
非常感谢亨利和Khmarbaise。pitest-junit5-plugin 的正确版本有助于消除错误。<groupId>org.pitest</groupId> <artifactId>pitest-maven</artifactId> <version>1.11.0</version> <groupId>org.pitest</groupId> <artifactId>pitest-junit5-plugin</artifactId> <version>1.1.2</version> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.8.2</version>

答:

0赞 RagaSGNur 2/8/2023 #1

pitest-junit5-plugin 的正确版本有助于消除错误。

<groupId>org.pitest</groupId> 
<artifactId>pitest-maven</artifactId> 
<version>1.11.0</version> 
<groupId>org.pitest</groupId> 
<artifactId>pitest-junit5-plugin</artifactId> 
<version>1.1.2</version> 
<groupId>org.junit.jupiter</groupId> 
<artifactId>junit-jupiter-engine</artifactId> 
<version>5.8.2</version>

除了 junit pitest-junit5-plugin 添加之外,还需要添加 --add-opens ,

<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>1.11.0</version>
<dependencies>
<dependency>
<groupId>org.pitest</groupId>
<artifactId>pitest-junit5-plugin</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
<configuration>
<argLine>
--add-opens java.base/java.lang=ALL-UNNAMED
</argLine> 
</configuration> 
</plugin>

评论

0赞 Nisarg Bhagavantanavar 7/17/2023
在我们使用 java11 之前,我们收到以下错误 Kill ratio 是 NaN% (0 0),但它有效,但在迁移到 Java 17 后,我们遇到了上述问题,以下版本我使用了 Jenkins 插件 - pitmutation:1.0-18 pitest-maven:1.11.0 pitest-junit5-plugin:1.1.2
0赞 RagaSGNur 7/17/2023
你检查了吗 1.使用了正确的 pitest-junit5-plugin 版本?2. 添加了此行 <argLine> --add-opens java.base/java.lang=ALL-UNNAMED </argLine> ?
0赞 Nisarg Bhagavantanavar 7/17/2023
我使用了与您提到的相同版本并使用了与上述相同的插件,这是完整的问题 stackoverflow.com/questions/76703339/...