2017-02-20 53 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

非常感谢您。 您的回答对我很有帮助 –

相关问题