我刚刚收到一个新项目,我有一个 java spring 项目的新存储库克隆。 当我使用 Gradle 构建它时,所有依赖项都会被下载,但是当 Gradle 任务之一执行时,单元测试,构建失败。
我认为问题出在 Mockito 的 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");
}
最佳答案
如果不检查您的代码或不重现您的问题,我无法告诉您确切的问题。但我猜问题应该与文件路径有关;
我可以看到断言对象中有一个名为 outputFilePath
的变量。在Linux环境中,我们使用斜杠/
作为文件路径,但在Windows环境中,它是反斜杠\
。
[2] https://stackoverflow.com/a/1589959/3728639
您需要调试 Junit 测试并将实际断言对象与预期对象进行比较
关于java - Mockito 与 JUnit 在 Windows 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58338965/