title: How to test spring configuration classes?
body: <p>I have a spring application whith configuration classes where instance the beans.</p>
  
  <p>Aplication class:</p>
  
  <pre><code>@Configuration
  @EnableAspectJAutoProxy
  @EnableSpringDataWebSupport
  @EnableTransactionManagement
  @ComponentScan(basePackageClasses = Application.class)
  @PropertySource(value = {"classpath:foo.properties"})
  @EnableJpaRepositories(basePackageClasses = Application.class)
  @EnableJpaAuditing
  public class Application {
  
      @Inject
      private Environment env;
  
      @Bean
      JndiTemplate jndiTemplate() {
          return new JndiTemplate();
      }
  
      @Bean
      public DataSource dataSource() {        
          DataSource dataSource = getDataSource();
          if (dataSource == null) {
              dataSource = new BasicDataSource();
              ((BasicDataSource) dataSource).setUsername(env.getProperty("jdbc.user"));
              ((BasicDataSource) dataSource).setPassword(env.getProperty("jdbc.password""));
  
              ((BasicDataSource) dataSource).setDriverClassName(env.getProperty("jdbc.driverClassName"));
              ((BasicDataSource) dataSource).setUrl(env.getProperty("jdbc.url"));
          }
          return dataSource;
      }
  
      @Bean
      public PlatformTransactionManager transactionManager() {
          EntityManagerFactory factory = entityManagerFactory().getObject();
          return new JpaTransactionManager(factory);
      }
  
      //....
  }
  </code></pre>
  
  <p>MvcConfiguration class:</p>
  
  <pre><code>@Configuration
  @ComponentScan(basePackageClasses = Application.class, includeFilters = @Filter({Controller.class, Component.class}), useDefaultFilters = true)
  class MvcConfiguration extends WebMvcConfigurationSupport {
      private static final String MESSAGES = "classpath:/i18n";
  
      private static final String VIEW_PREFIX = "/WEB-INF/views/";
  
      @Inject
      private Environment env;
  
      @Override
      public RequestMappingHandlerMapping requestMappingHandlerMapping() {
          RequestMappingHandlerMapping requestMappingHandlerMapping = super.requestMappingHandlerMapping();
          requestMappingHandlerMapping.setUseSuffixPatternMatch(false);
          requestMappingHandlerMapping.setUseTrailingSlashMatch(true);
  
          return requestMappingHandlerMapping;
      }
  
      @Bean(name = "messageSource")
      public MessageSource messageSource() {
          ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
          messageSource.setBasename(MESSAGES);
          messageSource.setCacheSeconds(5);
  
          return messageSource;
      }
  
      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
          registry.addResourceHandler("/static/").addResourceLocations("/static/**");
      }
  
      @Bean
      public MultipartResolver filterMultipartResolver(){
          CommonsMultipartResolver resolver = new CommonsMultipartResolver();
          resolver.setMaxUploadSize(Long.parseLong(env.getProperty("multipart.max.size")));
          return resolver;
      }
  
      //....
  
  }
  </code></pre>
  
  <p>And SecurityConfiguration class:</p>
  
  <pre><code>@Configuration
  @EnableWebSecurity
  @EnableGlobalMethodSecurity(prePostEnabled = true)
  class SecurityConfiguration extends WebSecurityConfigurerAdapter {
  
      @Bean
      public PasswordEncoder passwordEncoder() {
          return new BCryptPasswordEncoder();
      }
  
  
      //....
  
      @Override
      protected void configure(HttpSecurity http) throws Exception {
          //Logout por POST con el valor de token csrf
          http.authorizeRequests()
                  .antMatchers("/static/**").permitAll()
                  .anyRequest().authenticated()
                  .and()
              .formLogin()
                  .loginPage("/login")
                  .permitAll()
                  .failureUrl("/login?error=1")
                  .loginProcessingUrl("/authenticate")
                  .and()
              .logout()
                  .logoutUrl("/logout")
                  .logoutSuccessUrl("/signin")
                  .permitAll();
      }
  
  }
  </code></pre>
  
  <p>How I can test them with JUnit? How to test the beans are created in the spring context?</p>