为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Mockito 创建 Chunk Tasklet 的单元测试

使用 Mockito 创建 Chunk Tasklet 的单元测试

白猪掌柜的 2023-06-28 16:01:06
我有Chunk Tasklet一个读者和作者,我正在尝试为其进行单元测试,但我面临多个问题。它似乎最接近我想要做的。@ContextConfiguration(locations = { "classpath:config/beans-unittest-service.xml",        "classpath:config/beans-unittest-item.xml" })@RunWith(SpringJUnit4ClassRunner.class)public class KpiMetricFromCsvFileTaskletTest extends RegistryServiceImplTest {    @Autowired    @Qualifier("kpiMetricCsvItemReader")    ItemReader<KpiMetric> reader;    @Autowired    @Qualifier("kpiMetricCreatorWriter")    KpiMetricCreatorWriter writer;    @Override    @Before    public void init() {        writer.setRegistryService(registryService);        writer.setRegistry(registry);        setCreateKpiMeasureBehaviour();    }    private ChunkContext createChunkContext() {        StepExecution stepExecution = Mockito.mock(StepExecution.class);        StepContext stepContext = Mockito.mock(StepContext.class);        ChunkContext chunkContext = Mockito.mock(ChunkContext.class);        JobExecution jobExecution = MetaDataInstanceFactory.createJobExecution();        Mockito.when(chunkContext.getStepContext()).thenReturn(stepContext);        Mockito.when(stepContext.getStepExecution()).thenReturn(stepExecution);        Mockito.when(stepExecution.getJobExecution()).thenReturn(jobExecution);        return chunkContext;    }我的单元测试Class扩展了另一个Class,其中包含将设置模拟对象行为的方法。我有两个配置文件。其中一个包含一个读取器 beankpiMetricCsvItemReader和一个写入器 bean kpiMetricCreatorWriter。在我的单元测试init方法中,我将编写器的服务属性更改为模拟服务对象,我还模拟上下文对象,就像上面链接的答案一样。问题是,在该testTasklet方法中,我想创建一个 Tasklet 并执行它,但是当我运行程序时,出现错误:org.springframework.batch.item.ReaderNotOpenException:Reader 必须打开才能读取。我知道该文件未打开,但是当我使用 Spring Batch 启动我的作业时,我没有收到该错误,因此 Spring 应该自行打开我的文件。现在为了解决这个问题,我应该设法为读者打开文件,或者将微线程的创建委托给其他可以处理它的东西,但是如何呢?
查看完整描述

1 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

当在面向块的步骤之外使用时,应手动打开/关闭项目读取器/写入器。因此,就您的情况而言,您需要先自行打开阅读器,然后再使用它来读取数据。

查看完整回答
反对 回复 2023-06-28
  • 1 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信