Polish "Honour base path from @WebAppConfiguration in @WebMvcTest"

See gh-16485
This commit is contained in:
Andy Wilkinson 2019-06-17 13:46:25 +01:00
parent 7340d546b8
commit 645514f848
3 changed files with 14 additions and 8 deletions

View File

@ -34,8 +34,7 @@ class WebMvcTestContextBootstrapper extends SpringBootTestContextBootstrapper {
@Override
protected MergedContextConfiguration processMergedContextConfiguration(MergedContextConfiguration mergedConfig) {
MergedContextConfiguration processedMergedConfiguration = super.processMergedContextConfiguration(mergedConfig);
return new WebMergedContextConfiguration(processedMergedConfiguration,
getServletResourceBasePath(mergedConfig));
return new WebMergedContextConfiguration(processedMergedConfiguration, determineResourceBasePath(mergedConfig));
}
@Override

View File

@ -32,8 +32,8 @@ import org.springframework.test.context.web.WebAppConfiguration;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link WebMvcTest} when loading resources via {@link ServletContext} with
* {@link WebAppConfiguration}.
* Tests for {@link WebMvcTest @WebMvcTest} when loading resources via the
* {@link ServletContext} with {@link WebAppConfiguration @WebAppConfiguration}.
*
* @author Lorenzo Dee
*/
@ -46,7 +46,7 @@ public class WebMvcTestWithWebAppConfigurationTests {
private ServletContext servletContext;
@Test
public void getResourceLocation() throws Exception {
public void whenBasePathIsCustomizedResourcesCanBeLoadedFromThatLocation() throws Exception {
testResource("/inwebapp", "src/test/webapp");
testResource("/inmetainfresources", "/META-INF/resources");
testResource("/inresources", "/resources");

View File

@ -154,8 +154,7 @@ public class SpringBootTestContextBootstrapper extends DefaultTestContextBootstr
WebApplicationType webApplicationType = getWebApplicationType(mergedConfig);
if (webApplicationType == WebApplicationType.SERVLET
&& (webEnvironment.isEmbedded() || webEnvironment == WebEnvironment.MOCK)) {
mergedConfig = new WebMergedContextConfiguration(mergedConfig,
getServletResourceBasePath(mergedConfig));
mergedConfig = new WebMergedContextConfiguration(mergedConfig, determineResourceBasePath(mergedConfig));
}
else if (webApplicationType == WebApplicationType.REACTIVE
&& (webEnvironment.isEmbedded() || webEnvironment == WebEnvironment.MOCK)) {
@ -187,7 +186,15 @@ public class SpringBootTestContextBootstrapper extends DefaultTestContextBootstr
return WebApplicationType.SERVLET;
}
protected String getServletResourceBasePath(MergedContextConfiguration configuration) {
/**
* Determines the resource base path for web applications using the value of
* {@link WebAppConfiguration @WebAppConfiguration}, if any, on the test class of the
* given {@code configuration}. Defaults to {@code src/main/webapp} in its absence.
* @param configuration the configure to examine
* @return the resource base path
* @since 2.1.6
*/
protected String determineResourceBasePath(MergedContextConfiguration configuration) {
WebAppConfiguration webAppConfiguration = AnnotatedElementUtils
.findMergedAnnotation(configuration.getTestClass(), WebAppConfiguration.class);
return (webAppConfiguration != null) ? webAppConfiguration.value() : "src/main/webapp";