Java Mockito与JUnit在Windows上失败
我刚刚收到一个新项目,我有一个JavaSpring项目的新repo克隆。 当我用Gradle构建它时,所有依赖项都会被下载,但是当其中一个Gradle任务执行时,单元测试,构建就会失败 我认为问题在于Mockito的Java Mockito与JUnit在Windows上失败,java,spring,junit,mockito,Java,Spring,Junit,Mockito,我刚刚收到一个新项目,我有一个JavaSpring项目的新repo克隆。 当我用Gradle构建它时,所有依赖项都会被下载,但是当其中一个Gradle任务执行时,单元测试,构建就会失败 我认为问题在于Mockito的argThat()方法没有与JUnit很好地集成。这是问题发生的地方之一: 任何时候单元测试有这种逻辑,它都会失败: 控制台输出不用于上述测试,但它是一种具有更复杂逻辑的类似方法。 上述测试仍因相同问题而失败 这只会发生在我的机器上,而不会发生在Unix发行版fedora上的其他
argThat()
方法没有与JUnit很好地集成。这是问题发生的地方之一:
任何时候单元测试有这种逻辑,它都会失败:
控制台输出不用于上述测试,但它是一种具有更复杂逻辑的类似方法。
上述测试仍因相同问题而失败
这只会发生在我的机器上,而不会发生在Unix发行版fedora上的其他机器上
我认为问题是由于依赖项版本造成的,但我已经用不同的版本进行了测试,但没有结果
如果需要,我可以给你更多的信息。
多谢各位
编辑:代码-不是屏幕截图
@Test
void shouldAbortEventExecutionWhenJobFails() throws JobParametersInvalidException, JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException {
when(jobLauncher.run(eq(job1), argThat(jobParametersForPath(TEST_PATH_1)))).thenReturn(jobExecutionFailed);
when(job1.getName()).thenReturn("job1");
ExecutionState result = executor.execute(asList(event1, event2));
assertThat(result).isEqualTo(ExecutionState.FAILED);
verify(jobLauncher).run(eq(job1), argThat(jobParametersForPath(TEST_PATH_1)));
verify(jobLauncher, never()).run(eq(job2), argThat(jobParametersForPath(TEST_PATH_1)));
verify(jobLauncher).run(eq(job1), argThat(jobParametersForPath(TEST_PATH_2)));
verify(jobLauncher).run(eq(job2), argThat(jobParametersForPath(TEST_PATH_2)));
verifyNoMoreInteractions(jobLauncher);
}
private ArgumentMatcher<JobParameters> jobParametersForPath(String inputPath) {
return jobParameters ->
jobParameters.getParameters().get("inputFilePath").toString().equals(inputPath) &&
jobParameters.getParameters().get("outputFilePath").toString().equals(TEST_OUTPUT_PATH + "/" + inputPath) &&
jobParameters.getParameters().containsKey("timestamp");
}
@测试
void应在NjobFails()引发JobParametersInvalidException、JobExecutionReadyRunning异常、JobRestartException、JobInstanceAlreadyCompleteException、JobInstancealReadyException时中止执行{
当(jobLauncher.run(eq(job1),argThat(jobParametersForPath(TEST_PATH_1)))。然后返回(jobExecutionFailed);
when(job1.getName())。然后返回(“job1”);
ExecutionState结果=executor.execute(asList(event1,event2));
assertThat(result.isEqualTo(ExecutionState.FAILED);
验证(jobLauncher).run(eq(job1),argThat(jobParametersForPath(TEST_PATH_1));
验证(jobLauncher,never())。运行(eq(job2),argThat(jobParametersForPath(TEST_PATH_1));
验证(jobLauncher).run(eq(job1),argThat(jobParametersForPath(TEST_PATH_2));
验证(jobLauncher).run(eq(job2),argThat(jobParametersForPath(TEST_PATH_2));
验证NomoreInteractions(jobLauncher);
}
专用ArgumentMatcher作业参数forPath(字符串输入路径){
返回作业参数->
jobParameters.getParameters().get(“inputFilePath”).toString().equals(inputPath)&&
jobParameters.getParameters().get(“outputFilePath”).toString().equals(测试输出路径+“/”+输入路径)&&
jobParameters.getParameters().containsKey(“时间戳”);
}
如果不检查您的代码或不复制您的问题,我无法告诉您确切的问题。但我想问题应该与文件路径有关
我可以看到assertation对象中有一个名为outputFilePath
的变量。在Linux环境中,我们对文件路径使用斜杠/
,但在windows环境中使用反斜杠\
[1]
[2]
您需要调试Junit测试并将实际assertation对象与预期对象进行比较请粘贴代码本身,而不是屏幕截图。只需编辑文章即可