diff --git a/spring-test/src/test/java/org/springframework/test/context/junit4/aci/annotation/PropertySourcesInitializerTests.java b/spring-test/src/test/java/org/springframework/test/context/junit4/aci/annotation/PropertySourcesInitializerTests.java new file mode 100644 index 0000000000..96f38c9b42 --- /dev/null +++ b/spring-test/src/test/java/org/springframework/test/context/junit4/aci/annotation/PropertySourcesInitializerTests.java @@ -0,0 +1,89 @@ +/* + * Copyright 2002-2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.test.context.junit4.aci.annotation; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationContextInitializer; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.core.env.PropertySource; +import org.springframework.mock.env.MockPropertySource; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import static org.junit.Assert.*; + +/** + * Integration tests that verify that a {@link PropertySource} can be set via a + * custom {@link ApplicationContextInitializer} in the Spring TestContext Framework. + * + * @author Sam Brannen + * @since 4.1 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(initializers = PropertySourcesInitializerTests.PropertySourceInitializer.class) +public class PropertySourcesInitializerTests { + + @Configuration + static class Config { + + @Value("${enigma}") + // If the PropertySourcesPlaceholderConfigurer is not configured as a + // static @Bean, then the following can be used to directly access the + // environment instead of relying on placeholder replacement. + // @Value("#{ environment['enigma'] }") + private String enigma; + + + @Bean + public String enigma() { + return enigma; + } + + @Bean + public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + } + + + @Autowired + private String enigma; + + + @Test + public void customPropertySourceConfiguredViaContextInitializer() { + assertEquals("foo", enigma); + } + + + public static class PropertySourceInitializer implements + ApplicationContextInitializer { + + @Override + public void initialize(ConfigurableApplicationContext applicationContext) { + applicationContext.getEnvironment().getPropertySources().addFirst( + new MockPropertySource().withProperty("enigma", "foo")); + } + } + +}