Search code examples
javaspringjunit

SpringBeanAutowiringSupport does not inject beans in jUnit tests


I use SpringBeanAutowiringSupport for bean injection in some objects. Problem is, that injection of beans does not work in jUnit tests. For testing is used 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());
        // ...
    }
  // ...
}

Does anyone have any idea, why injection using SpringBeanAutowiringSupport does not work in jUnit tests?


Solution

  • Thanks to M. Denium's, his solution workds.

    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());
                // ...
            }
          // ...
        }