dimanche 15 mai 2016

Spring Autowiring Fails on Test Class

I have a web application which includes a REST API and I want to do an integration test over it. I'm using MongoDB and I want to inject its instance. However, every time I try to do so the autowiring fails with an error like

java.lang.IllegalStateException: Failed to load ApplicationContext

Here are my files;

@Configuration public class SpringMongoConfig extends AbstractMongoConfiguration {

    @Override
    protected String getDatabaseName() { 
        return "pensionplanner";
    }

    @Override
    @Bean
    public Mongo mongo() throws Exception { 
        return new MongoClient("127.0.0.1");
    }

    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        return new MongoTemplate(mongo(),getDatabaseName());
    }

}

WebAppInitializer.java

 public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] {RootConfig.class, SpringMongoConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] {};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }

}

DaoMango.java

 @Repository("daoMongo") @Transactional 
public class DaoMongo implements Dao {

    private MongoOperations mongoOperations;

    public DaoMongo() {
    mongoOperations = loadMongoConfiguration();

    }

    //some queries will come here

    private MongoOperations loadMongoConfiguration() {
        @SuppressWarnings("resource")
        ApplicationContext applicationContext = 
                 new AnnotationConfigApplicationContext(SpringMongoConfig.class);
        MongoOperations mongoOperation = (MongoOperations) applicationContext.getBean("mongoTemplate");

        return mongoOperation;
    }

}

Test.java

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SpringMongoConfig.class})
public class Test {


    @Autowired
    DaoMongo dao;

The problem is above that I can't inject dao DaoMongo instance here, however I can do it on any src/main/java folder. Any solution would be very appreciated.

Aucun commentaire:

Enregistrer un commentaire