【发布时间】:2014-09-18 21:49:49
【问题描述】:
我在某些对象中使用SpringBeanAutowiringSupport 进行 bean 注入。问题是,bean 的注入在 jUnit 测试中不起作用。用于测试使用 SpringJUnit4ClassRunner。
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 测试中不起作用?
【问题讨论】:
-
因为测试运行器不使用
ContextLoader来加载上下文。这由SpringBeanAutowiringSupport使用。它基本上不检测上下文。作为一个额外的困难,它还期望它是WebApplicationContext,而不是常规的ApplicationContext。作为一种解决方法,您可以注入ApplicationContext并通过调用getAutowireCapableBeanFactory().autowireBean(yourInstance);自己手动进行接线。