Spring批处理步骤集成测试

Spring批处理步骤集成测试,spring,spring-boot,spring-batch,Spring,Spring Boot,Spring Batch,我正在寻找一些关于测试Spring批处理步骤和步骤执行的一般性意见和建议 我的基本步骤是从api读入数据,处理实体对象,然后写入数据库。我已经测试了快乐之路,这一步成功地完成了。我现在想做的是在处理器阶段数据丢失时测试异常处理。我可以单独测试processor类,但我更愿意测试整个步骤,以确保在步骤/作业级别正确反映流程故障 我已经阅读了spring批量测试指南,如果我是诚实的,我对它有点迷茫。是否可以使用StepScopeTestUtils.doInStepScope或更新步骤执行来测试此场景

我正在寻找一些关于测试Spring批处理步骤和步骤执行的一般性意见和建议

我的基本步骤是从api读入数据,处理实体对象,然后写入数据库。我已经测试了快乐之路,这一步成功地完成了。我现在想做的是在处理器阶段数据丢失时测试异常处理。我可以单独测试processor类,但我更愿意测试整个步骤,以确保在步骤/作业级别正确反映流程故障

我已经阅读了spring批量测试指南,如果我是诚实的,我对它有点迷茫。是否可以使用StepScopeTestUtils.doInStepScope或更新步骤执行来测试此场景?理想情况下,我会在处理器启动之前强制读卡器返回错误数据


如有任何建议,将不胜感激

最佳方法取决于您的测试范围。读一下这里的字里行间,我假设您正在使用Spring IT,设置Spring上下文,并使用JobLauncherTestUtils启动作业或步骤

我认为最简单的方法是用触发错误场景的mock替换一个bean。使用Mockito,可以通过向测试配置中添加类似的内容来实现

@Bean
public ReaderDataRepository dataApi(){
    return mock(ReaderDataRepository.class);
}
然后,这个bean覆盖实际的实现。在测试设置中,您可以非常明确地配置此模拟

@Autowired
private ReaderDataRepository mockedRepository;

@Before
public void setUp() {
    when(mockedRepository.getData()).thenReturn(faultyData())
}

这几乎不涉及对Spring“magic”的操作,并且非常明确地定义了测试中的错误

多谢各位。这个答案很有道理。一旦我成功实施,我将接受并更新我自己的评论。