2014-09-18 26 views
1

我在某些对象中使​​用SpringBeanAutowiringSupport进行bean注入。问题是,注入bean在jUnit测试中不起作用。对于测试使用SpringJUnit4ClassRunner。SpringBeanAutowiringSupport不会在jUnit测试中注入bean

public class DossierReportItemXlsImporterImpl implements DossierRerportItemXlsImporer { 

    private final Logger logger = Logger.getLogger(getClass()); 
    // are not autowired. 
    @Autowired 
    private DossierReportService dossierReportService; 
    @Autowired 
    private DossierReportItemService dossierReportItemService; 
    @Autowired 
    private NandoCodeService nandoCodeService; 

    public DossierReportItemXlsImporterImpl(){ 
     SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); 
    } 

    //... 
} 


public class DossierRerportItemXlsImporerTest extends AuditorServiceTest{ 

    // injected OK 
    @Autowired 
    private DossierReportService dossierReportService; 
    @Autowired 
    private DossierReportItemService dossierReportItemService; 

    @Test 
    public void testXlsImport(){ 
     DossierRerportItemXlsImporer importer = new DossierReportItemXlsImporterImpl(); 
     importer.processImport(createDossierReport(), loadFile()); 
     // ... 
    } 
    // ... 
} 

有没有人有任何想法,为什么注射使用SpringBeanAutowiringSupport不工作在jUnit测试?

+4

因为测试运行器不使用ContextLoader来加载上下文。这由'SpringBeanAutowiringSupport'使用。它基本上不检测上下文。作为一个额外的困难,它也期望它是一个'WebApplicationContext'而不是一个常规的'ApplicationContext'。作为一种解决方法,您可以通过调用'getAutowireCapableBeanFactory()。autowireBean(yourInstance);'来注入'ApplicationContext'并手动完成接线。 – 2014-09-19 05:46:14

回答

0

感谢M. Denium的解决方案。

public class DossierReportItemXlsImporterImpl implements DossierRerportItemXlsImporer { 

    private final Logger logger = Logger.getLogger(getClass()); 

    @Autowired 
    private DossierReportService dossierReportService; 
    @Autowired 
    private DossierReportItemService dossierReportItemService; 
    @Autowired 
    private NandoCodeService nandoCodeService; 

    public DossierReportItemXlsImporterImpl(final ApplicationContext contex){ 
     contex.getAutowireCapableBeanFactory().autowireBean(this); 
    } 

    //... 
} 


public class DossierRerportItemXlsImporerTest extends AuditorServiceTest{ 

     @Autowired 
     private ApplicationContext context; 
     @Autowired 
     private DossierReportService dossierReportService; 
     @Autowired 
     private DossierReportItemService dossierReportItemService; 

     @Test 
     public void testXlsImport(){ 
      DossierRerportItemXlsImporer importer = new DossierReportItemXlsImporterImpl(context); 
      importer.processImport(createDossierReport(), loadFile()); 
      // ... 
     } 
     // ... 
    } 
1

好泉+ junit团队已经解决了这个问题。看看这个链接 - >
spring unit testing

否则,你可以调用Spring上下文和使用的getBean方法,但是以这种方式,你甚至可以用你的类,而不是JUnit测试

内一个简单的测试主要做

**注意如果你使用spring + junit配置,你必须将test-spring-context.xml放入测试包

相关问题