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