1
我試圖在使用JUnit的Spring引導中對Spring批處理作業進行單元測試。 我寫這個測試類,我想窺探豆ItemReader:Spring引導@SpyBean嘗試實例化一個新的bean,而不是在上下文中偵察這個bean
@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(並且我指定了一個接口):
org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.batch.item.ItemReader]: Specified class is an interface
我非常確定bean(ItemReader類型)已經在上下文中,因爲:
- 調試,我看到目標bean實例化正確處理
- 如果我改變@SpyBean註釋的@Autowired註解,先前點的情況下被正確注射
任何提示?謝謝
在我開了Github上的問題的同時,因爲刺探其他豆類就像一個魅力:https://github.com/spring-projects/spring-boot/issues/7625 – lincetto