Spring JUnit Test not loading full Application Context

java, junit, spring, spring-boot, spring-test

Solution

You need to annotate your test class with `@ActiveProfiles` as follows; otherwise, your `Application` configuration class will always be disabled. That's why you currently do not see any of your own beans listed in the `ApplicationContext`.

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@ActiveProfiles(Constants.SPRING_PROFILE_DEVELOPMENT)
public class MongoDbRepositoryTest { /* ... */ }

In addition, `Application` should be annotated with `@Configuration` as was mentioned by someone else.

Problem

Hi I am trying to so spring junit test cases... and I require my full application context to be loaded. However the junit test does not initialize the full application context. Test class: ``` @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) public class MongoDbRepositoryTest { @Value("${spring.datasource.url}") private String databaseUrl; @Inject private ApplicationContext appContext; @Test public void testCRUD() { System.out.println("spring.datasource.url:" + databaseUrl); showBeansIntialised(); assertEquals(1, 1); } private void showBeansIntialised() { System.out.println("BEEEAAANSSSS"); for (String beanName : appContext.getBeanDefinitionNames()) { System.out.println(beanName); } } ``` Output: ``` spring.datasource.url:${spring.datasource.url} BEEEAAANSSSS org.springframework.context.annotation.internalConfigurationAnnotationProcessor org.springframework.context.annotation.internalAutowiredAnnotationProcessor org.springframework.context.annotation.internalRequiredAnnotationProcessor org.springframework.context.annotation.internalCommonAnnotationProcessor org.springframework.context.annotation.internalPersistenceAnnotationProcessor org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor ``` Main Application Class Annotations: ``` @ComponentScan(basePackages = "com.test") @EnableAutoConfiguration(exclude = { MetricFilterAutoConfiguration.class, MetricRepositoryAutoConfiguration.class }) @EnableMongoRepositories("com.test.repository.mongodb") @EnableJpaRepositories("com.test.repository.jpa") @Profile(Constants.SPRING_PROFILE_DEVELOPMENT) public class Application { ... ``` Hence it should scan all the spring bean in the package com.test and also load them into the applicationcontext for the Junit testcase. But from the output of the beans initalised it doesnt seem to be doing this.

Original source