我正在尝试使用JUnit对Spring引导内的Spring批处理作业进行单元测试。 我写了这个测试类,我想监视bean的ItemReader:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
@ActiveProfiles({"dev", "batch", "test-jobs"})
public class BatchJobTest {
@Autowired
private JobLauncherTestUtils jobLauncherTestUtils;
private @Autowired @Qualifier("contactDownloadAckJob") Job contactDownloadAckTaskJob;
@SpyBean
private ItemReader<CrsOscContact> reader;
@Test
public void testJob() throws Exception {
given(this.reader.read()).willReturn(new CrsOscContact());
//... blah blah blah
}
}
当我运行这个测试时,似乎@SpyBean注释没有完成它的工作,它应该代理已经存在于上下文中的ItemReader bean,因此我获得了(正确的)异常,因为,根据定义,如果找不到bean,它会尝试实例化该类型的新bean(我已经指定了一个接口):
org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.batch.item.ItemReader]: Specified class is an interface
我很确定bean(ItemReader类型)已经在上下文中了,因为:
任何提示?谢谢
答案 0 :(得分:1)
这是一个Spring Core问题,现已修复。