Java 为什么pitest在命令行中与maven一起工作,而不是在Jenkins管道中?
我这里有一个奇怪的问题,我找不到原因: 在命令行上将pitest与maven(和java11)结合使用时,它的工作原理与预期一致,但在Jenkins服务器上通过声明性管道运行时,会导致错误 来自我的maven pom的部分:Java 为什么pitest在命令行中与maven一起工作,而不是在Jenkins管道中?,java,maven,unit-testing,jenkins-pipeline,pitest,Java,Maven,Unit Testing,Jenkins Pipeline,Pitest,我这里有一个奇怪的问题,我找不到原因: 在命令行上将pitest与maven(和java11)结合使用时,它的工作原理与预期一致,但在Jenkins服务器上通过声明性管道运行时,会导致错误 来自我的maven pom的部分: <build> <plugins> <plugin> <groupId>org.pitest</groupId> <artifactId>pitest-maven&l
<build>
<plugins>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>1.4.8</version>
<dependencies>
<dependency>
<groupId>org.pitest</groupId>
<artifactId>pitest-junit5-plugin</artifactId>
<version>0.8</version>
</dependency>
</dependencies>
<configuration>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>
</build>
在此之前,将从管道中调用以下maven命令:
mvn—批处理模式清理
mvn—批处理模式编译
mvn—批处理模式编译器:testCompile surefire:test-Dmaven.test.failure.ignore=true
当在命令行上准确地调用这些命令时,pitest可以完美地工作
当比较测井结果时,它们几乎相等
命令行的日志输出:
PIT>>良好:最大可用内存为3609 mb
PIT>>精细:仆从:安装PIT代理
PIT>>信息:向仆从发送13个测试类
PIT>>信息:已向仆从发送测试
PIT>>信息:仆从:08:51:20 PIT>>好:期望家长提供13个测试类
PIT>>罚款:收到测试类
PIT>>信息:检查环境
坑>>信息:仆从:08:51:20坑>>信息:找到1个测试
PIT>>信息:仆从:08:51:20 PIT>>信息:依赖性分析将潜在测试的数量减少了0
维修点>>信息:仆从:08:51:20维修点>>信息:收到1个测试
维修站>>信息:仆从:08:51:20维修站>>精细:运行1个单位
PIT>>信息:仆从:08:51:20 PIT>>精细:收集测试描述的覆盖率[testClass=de.test.Tests,name=creation()]
坑>>良好:覆盖生成器仆从退出正常
PIT>>信息:计算的覆盖率为0秒
PIT>>精细:覆盖率计算后使用内存42 mb
PIT>>精细:覆盖率计算后释放内存201 mb
[…产量削减]
Jenkins管道的日志输出:
PIT>>良好:最大可用内存为1813 mb
PIT>>精细:仆从:安装PIT代理
PIT>>信息:向仆从发送13个测试类
PIT>>信息:已向仆从发送测试
PIT>>信息:仆从:08:46:28 PIT>>很好:期望家长提供13个测试类
PIT>>罚款:收到测试类
PIT>>信息:检查环境
坑>>信息:仆从:08:46:29坑>>信息:找到1个测试
PIT>>信息:仆从:08:46:29 PIT>>信息:依赖性分析将潜在测试的数量减少了0
维修点>>信息:仆从:08:46:29维修点>>信息:收到1个测试
维修站>>信息:仆从:08:46:29维修站>>精细:运行1个单位
PIT>>信息:仆从:08:46:29 PIT>>精细:收集测试描述的覆盖率[testClass=de.test.Tests,name=creation()]
坑>>良好:覆盖生成器仆从退出正常
PIT>>信息:计算的覆盖率为1秒。
PIT>>精细:覆盖率计算后使用的内存为43 mb
PIT>>精细:覆盖率计算后释放内存177MB
PIT>>信息:创建了0个突变测试单元
[信息]------------------------------------------------------------------------
[信息]生成失败
[信息]------------------------------------------------------------------------
[信息]总时间:3.644秒
[信息]完成时间:2019-06-06T08:46:29+02:00
[信息]------------------------------------------------------------------------
[错误]无法执行目标组织。pitest:pitest maven:1.4.8:mutationCoverage(默认cli)在项目多上传程序上:执行目标组织的默认cli。pitest:pitest maven:1.4.8:mutationCoverage失败:未找到任何突变。这可能意味着提供的类路径或筛选器存在问题。
[错误]有关详细信息,请参阅
所以我只能假设环境是不同的,但是哪一个呢?或者它是pitest中的一个bug?最可能的问题是,pitest是由jenkins在一个尚未编译测试的环境中执行的 最健壮的方法是将pitest绑定到概要文件中的测试阶段,而不是直接调用目标
<profile>
<id>pitest</id>
<build>
<plugins>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>1.4.8</version>
<executions>
<execution>
<id>pitest</id>
<phase>test</phase>
<goals>
<goal>mutationCoverage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
您能更详细地解释一下为什么在没有编译测试的环境中执行pitest吗?正如我所描述的,我的管道已经编译了测试。我不能认为(如果是这样的话)这是环境/jenkins的问题。我确信测试是在jenkins环境中编译的-更多信息请查看我的问题这证明了这一点,因为我运行SpotBugs/FindBugs等工具,它们也需要编译代码。
<profile>
<id>pitest</id>
<build>
<plugins>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>1.4.8</version>
<executions>
<execution>
<id>pitest</id>
<phase>test</phase>
<goals>
<goal>mutationCoverage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
mvn -Ppitest test