2017-02-20 88 views
0

我寫了一個測試類。自動裝配Autowired注射失敗

@ActiveProfiles("dev") 
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {  "classpath:spring/appContext.xml","classpath:spring/appContext-datasource.xml"}) 
@Transactional 
public class ReadReconciliationFileTest { 
@Autowired 
private OriginalReconciliationInformationExtMapper originalReconciliationInformationExtMapper; 
@Autowired 
private ProblematicReconciliationInformationMapper problematicReconciliationInformationMapper; 
@Test 
public void insertReconciliationInformation(){ 
    ReadReconciliationFileFactory readFactory=new AllinReadReconciliationFileFactory(); 
    ReadReconciliationFile read=readFactory.produce(); 
    List<ReconciliationBean> list=read.readFile("/Users/wuchangming/Documents/work/通聯/tlt_javademo/PDS2006040000004450420170216.txt"); 
    for(int i=0;list!=null&&i<list.size();i++){ 
     originalReconciliationInformationExtMapper.insertInformation(list.get(i)); 
    } 
    List<ReconciliationBean> list2=originalReconciliationInformationExtMapper.getInformationList(null); 
    List<String> list3=problematicReconciliationInformationMapper.getProblematicDataList("9",null); 
    Assert.assertEquals(list.size(),list2.size()+list3.size()); 
} 
} 

在這個類中,自動裝配Autowired是有效的。 但ReadReconciliationFile類AllinReadReconciliationFileImpl的執行,自動裝配Autowired注射是空的。 enter image description here

請幫助我。 謝謝!

+0

你是否顯示你的所有代碼?通常情況下,這種情況發生在您無意中在您的測試課程中「新測試」您的課程。 – Tobb

+0

沒有失敗的自動連線...您正在測試方法中創建一個新實例...使用自動佈線時,@ @ Autowired屬性不能爲空(除非您告訴它它可以)。如果自動佈線失敗,則應用程序在啓動時就會崩潰。 –

回答

0

這些行:

ReadReconciliationFileFactory readFactory=new AllinReadReconciliationFileFactory(); 
ReadReconciliationFile read=readFactory.produce(); 

將(可能)創建一個AllinReadReconciliationFileImplSpring一無所知,因此無法自動裝配任何東西。

您需要@Inject這個類的對象,並使用它。

+0

謝謝! 我是否需要AllinReadReconciliationFileFactory的對象? –

+0

您需要由Spring創建的'AllinReadReconciliationFileImpl'。你通常會使用工廠或Spring,但同時也沒什麼意義。 – Tobb

+0

非常感謝您。 您的回答對我很有幫助 –

相關問題