问题:
我正在为我的一种 Spring 批量工作方法编写单元测试。我使用mockito 来模拟我的批处理作业依赖项。在 jobExecution 发挥作用之前一切都很好。我想要测试的方法调用了 jobExecution 变量,但随后它给了我 NPE (NullPointerException),并且我没有成功地用 mockito 来模拟它。
<小时/>我尝试过的事情:
就像问题部分提到的那样,我尝试使用 @Mock 注释来模拟它。
<小时/>代码:
我的方法需要进行单元测试(currentJobExecution是给我错误的行):
@Override
public List<Date> getValidDates() {
List<Date> allDates = dateService.findAllFailedDates(getJobName(), false);
List<Date> datesThatCanBeWorkedOn = getAllDatesThatHaveNecessaryDependencies(allDates);
Collection<Date> datesThatCannotBeWorkedOn = CollectionUtils.subtract(allDates, datesThatCanBeWorkedOn);
currentJobExecution.getExecutionContext().put("datesThatCannotBeWorkedOn", datesThatCannotBeWorkedOn);
return datesThatCanBeWorkedOn;
}
我的单元测试尝试测试上面的代码:
@RunWith(SpringJUnit4ClassRunner.class)
public class ValidDateReaderTest extends BaseTest {
@InjectMocks
private ValidDateReader validDateReader;
@Mock
private DateService dateService;
@Mock
private JobExecution currentJobExecution;
@Mock
private JobInstance jobInstance;
@Test
public void getDatesNeededProcessingTest() {
when(jobInstance.getJobName()).thenReturn(BatchNames.VALID_DATE_READER);
when(currentJobExecution.getJobInstance()).thenReturn(jobInstance);
List<Date> allDates = new ArrayList<>();
allDates.add(DateUtils.addDays(new Date(), -5));
allDates.add(DateUtils.addDays(new Date(), -4));
allDates.add(DateUtils.addDays(new Date(), -3));
allDates.add(DateUtils.addDays(new Date(), -2));
allDates.add(DateUtils.addDays(new Date(), -1));
when(dateService.findAllFailedDates(BatchNames.VALID_DATE_READER, false))
.thenReturn(allDates);
assertEquals(1, validDateReader.getValidDates().size());
}
}
<小时/>
预期结果和实际结果:
当我删除此 currentJobExecution
currentJobExecution.getExecutionContext().put("datesThatCannotBeWorkedOn", datesThatCannotBeWorkedOn);
从我想要测试的方法,然后测试成功完成。但我无法删除它,因为它是业务逻辑的一部分。
最佳答案
似乎currentJobExecution.getExecutionContext()
正在返回null
。您可能也想 mock 它:
when(currentJobExecution.getExecutionContext()).thenReturn(new ExecutionContext());
关于java - 使用mockito初始化spring batch jobExecution,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58409384/