2016-12-12 49 views
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註解,先前點的情況下被正確注射

任何提示?謝謝

+0

在我開了Github上的問題的同時,因爲刺探其他豆類就像一個魅力:https://github.com/spring-projects/spring-boot/issues/7625 – lincetto

回答

相關問題