带有 gradle 的 PITest 不支持的类文件主要版本

PITest with gradle Unsupported class file major version

提问人:Jim 提问时间:10/9/2023 更新时间:10/10/2023 访问量:139

问:

我正在尝试让 pitest 在这个 java gradle 项目中运行,但遇到了非常困难的时期......😢

我至少有两个问题:一个是关于包的,一个是关于Java版本的。

1)

第一个问题是我的项目设置了一个公共类,该类不包含在任何包中。我知道这样做是一种反模式,但对于只有一个 java 类和测试文件的项目,似乎没有必要有一个额外的包容器。

无论如何,似乎 pitest 无法在不位于包内的情况下提交文件。我在这里错了吗?我可以为“testClasses”值添加一些东西,它会选择我的 Lasagna 类?

2)

好的,所以在这里的代码中,我已经为我的 Lasagna 类声明了“LP”包,并用这个 pitest 块更新了我的:build.gradle

pitest {
    targetClasses = ['LP*']  // by default "${project.group}.*"
    threads = 4
    outputFormats = ['XML', 'HTML']
    timestampedReports = false
    junit5PluginVersion = '1.2.0'
}

问题是当我运行时,我收到“不支持的类版本”错误......gradle pitest

任务 :p itest 失败 上午 11:17:45 PIT >>信息:详细日志记录被禁用。如果您遇到问题,请在报告问题之前启用它。 线程“main”java.lang.IllegalArgumentException 中的异常:不支持的类文件主要版本 65 在 org.pitest.reloc.asm.ClassReader。(ClassReader.java:199) 在 org.pitest.reloc.asm.ClassReader。(ClassReader.java:180) 在 org.pitest.reloc.asm.ClassReader。(类阅读器.java:166) 在 org.pitest.classinfo.ClassInfoVisitor.getClassInfo(ClassInfoVisitor.java:41) 在 org.pitest.classinfo.Repository.nameToClassInfo(Repository.java:70) 在 org.pitest.classinfo.Repository.fetchClass(Repository.java:60) 在 org.pitest.classinfo.NameToClassInfo.apply(NameToClassInfo.java:17) 在 org.pitest.classinfo.NameToClassInfo.apply(NameToClassInfo.java:7) 在 java.base/java.util.function.Function.lambda$andThen$1(Function.java:88) 在 java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) 在 java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708) 在 java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) 在 java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) 在 java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) 在 java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 在 java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) 在 org.pitest.classpath.CodeSource.getCode(CodeSource.java:44) 在 org.pitest.mutationtest.verify.DefaultBuildVerifier.verify(DefaultBuildVerifier.java:32) 在 org.pitest.mutationtest.tooling.MutationCoverage.verifyBuildSuitableForMutationTesting(MutationCoverage.java:275) 在 org.pitest.mutationtest.tooling.MutationCoverage.runReport(MutationCoverage.java:118) 在 org.pitest.mutationtest.tooling.EntryPoint.execute(EntryPoint.java:129) 在 org.pitest.mutationtest.tooling.EntryPoint.execute(EntryPoint.java:57) 在 org.pitest.mutationtest.commandline.MutationCoverageReport.runReport(MutationCoverageReport.java:98) 在org.pitest.mutationtest.commandline.MutationCoverageReport.main(MutationCoverageReport.java:45)

当我运行时,我得到以下输出:gradle -v


Gradle 8.3 版本

构建时间: 2023-08-17 07:06:47 UTC 修订版:8afbf24b469158b714b36e84c6f4d4976c86fcd5

科特林:1.9.0 时髦:3.0.17 蚂蚁:Apache Ant(TM) 版本 1.10.13 编译于 2023 年 1 月 4 日 JVM:21(自制软件 21) 操作系统: Mac OS X 12.4 x86_64

当我运行时,它会输出一个错误,但我确实已经安装并可以在需要时切换版本,但我不确定它是否希望我切换当前 shell 正在使用的版本或将其切换到哪个版本......java -vjabba

java gradle build.gradle 突变测试 pitest

评论


答:

1赞 henry 10/10/2023 #1

您使用的是 gradle 插件 1.9.0 使用的默认 pitest 版本。这是很古老的。

配置 pitest 的显式最新版本

pitest {
    pitestVersion = '1.15.0' 
    ...
}

或者升级到最近发布的 1.15.0 版 gradle 插件,该插件默认使用 pitest 1.15.0。