gpt4 book ai didi

java - 使用mockito初始化spring batch jobExecution

转载 作者:行者123 更新时间:2023-12-02 01:17:02 25 4
gpt4 key购买 nike

问题:

我正在为我的一种 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com