我有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 应该自行打开我的文件。
现在为了解决这个问题,我应该设法为读者打开文件,或者将微线程的创建委托给其他可以处理它的东西,但是如何呢?
缥缈止盈
相关分类