Skip to content

Commit 798e5f9

Browse files
committed
Refine @TestPropertySource locations support
Update SpringApplicationContextLoader to configure test property locations before the ApplicationContext is actually started. Fixes spring-projectsgh-2198
1 parent 80111c8 commit 798e5f9

File tree

2 files changed

+51
-5
lines changed

2 files changed

+51
-5
lines changed

spring-boot/src/main/java/org/springframework/boot/test/SpringApplicationContextLoader.java

+24-4
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public class SpringApplicationContextLoader extends AbstractContextLoader {
7676
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
7777

7878
@Override
79-
public ApplicationContext loadContext(MergedContextConfiguration config)
79+
public ApplicationContext loadContext(final MergedContextConfiguration config)
8080
throws Exception {
8181
assertValidAnnotations(config.getTestClass());
8282
SpringApplication application = getSpringApplication();
@@ -98,8 +98,6 @@ public ApplicationContext loadContext(MergedContextConfiguration config)
9898
}
9999
application.setInitializers(initializers);
100100
ConfigurableApplicationContext applicationContext = application.run();
101-
TestPropertySourceUtils.addPropertiesFilesToEnvironment(applicationContext,
102-
config.getPropertySourceLocations());
103101
return applicationContext;
104102
}
105103

@@ -116,7 +114,7 @@ private void assertValidAnnotations(Class<?> testClass) {
116114

117115
/**
118116
* Builds new {@link org.springframework.boot.SpringApplication} instance. You can
119-
* override this method to add custom behaviour
117+
* override this method to add custom behavior
120118
* @return {@link org.springframework.boot.SpringApplication} instance
121119
*/
122120
protected SpringApplication getSpringApplication() {
@@ -196,6 +194,8 @@ private void addProperties(ConfigurableEnvironment environment,
196194
private List<ApplicationContextInitializer<?>> getInitializers(
197195
MergedContextConfiguration mergedConfig, SpringApplication application) {
198196
List<ApplicationContextInitializer<?>> initializers = new ArrayList<ApplicationContextInitializer<?>>();
197+
initializers.add(new PropertySourceLocationsInitializer(mergedConfig
198+
.getPropertySourceLocations()));
199199
initializers.add(new ServerPortInfoApplicationContextInitializer());
200200
initializers.addAll(application.getInitializers());
201201
for (Class<? extends ApplicationContextInitializer<?>> initializerClass : mergedConfig
@@ -273,4 +273,24 @@ private static boolean isIntegrationTest(Class<?> testClass) {
273273
.findAnnotation(testClass, WebIntegrationTest.class) != null));
274274
}
275275

276+
/**
277+
* {@link ApplicationContextInitializer} to setup test property source locations.
278+
*/
279+
private static class PropertySourceLocationsInitializer implements
280+
ApplicationContextInitializer<ConfigurableApplicationContext> {
281+
282+
private final String[] propertySourceLocations;
283+
284+
public PropertySourceLocationsInitializer(String[] propertySourceLocations) {
285+
this.propertySourceLocations = propertySourceLocations;
286+
}
287+
288+
@Override
289+
public void initialize(ConfigurableApplicationContext applicationContext) {
290+
TestPropertySourceUtils.addPropertiesFilesToEnvironment(applicationContext,
291+
this.propertySourceLocations);
292+
}
293+
294+
}
295+
276296
}

spring-boot/src/test/java/org/springframework/boot/test/SpringApplicationIntegrationTestPropertyLocationTests.java

+27-1
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@
1616

1717
package org.springframework.boot.test;
1818

19+
import javax.annotation.PostConstruct;
20+
1921
import org.junit.Test;
2022
import org.junit.runner.RunWith;
2123
import org.springframework.beans.factory.annotation.Autowired;
24+
import org.springframework.beans.factory.annotation.Value;
25+
import org.springframework.boot.test.SpringApplicationIntegrationTestPropertyLocationTests.MoreConfig;
2226
import org.springframework.boot.test.SpringApplicationIntegrationTestTests.Config;
27+
import org.springframework.context.annotation.Configuration;
2328
import org.springframework.core.env.Environment;
2429
import org.springframework.test.context.TestPropertySource;
2530
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -34,7 +39,7 @@
3439
* @author Phillip Webb
3540
*/
3641
@RunWith(SpringJUnit4ClassRunner.class)
37-
@SpringApplicationConfiguration(classes = Config.class)
42+
@SpringApplicationConfiguration(classes = { Config.class, MoreConfig.class })
3843
@WebAppConfiguration
3944
@IntegrationTest({ "server.port=0", "value1=123" })
4045
@TestPropertySource(properties = "value2=456", locations = "classpath:/test-property-source-annotation.properties")
@@ -51,4 +56,25 @@ public void loadedProperties() throws Exception {
5156
equalTo("fromfile"));
5257
}
5358

59+
@Configuration
60+
static class MoreConfig {
61+
62+
@Value("${value1}")
63+
private String value1;
64+
65+
@Value("${value2}")
66+
private String value2;
67+
68+
@Value("${annotation-referenced}")
69+
private String annotationReferenced;
70+
71+
@PostConstruct
72+
void checkValues() {
73+
assertThat(this.value1, equalTo("123"));
74+
assertThat(this.value2, equalTo("456"));
75+
assertThat(this.annotationReferenced, equalTo("fromfile"));
76+
}
77+
78+
}
79+
5480
}

0 commit comments

Comments
 (0)