Ensure that webEnvironment=NONE creates non-web context

Previously, if spring.main.web-application-type was configured in
application.properties to servlet or reactive, setting
webEnvironment=NONE on @SpringBootTest would not work correctly and
a servlet or reactive web application context would be created
based on the value of spring.main.web-application-type.

This commit updates the test context bootstapper to set
spring.main.web-application-type to none when webEnvironment has been
set to none. This is done in the merged context configuration's
property source properties which are applied to the environment in a
high-precedence test property source that will override configuration
in application.properties.

Closes gh-29695
This commit is contained in:
Andy Wilkinson
2022-04-14 14:44:30 +01:00
parent c8de843d85
commit 8f1b8622ba
8 changed files with 186 additions and 4 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2020 the original author or authors.
* Copyright 2012-2022 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.
@@ -293,9 +293,13 @@ public class SpringBootTestContextBootstrapper extends DefaultTestContextBootstr
// precedence
propertySourceProperties.addAll(0, Arrays.asList(properties));
}
if (getWebEnvironment(testClass) == WebEnvironment.RANDOM_PORT) {
WebEnvironment webEnvironment = getWebEnvironment(testClass);
if (webEnvironment == WebEnvironment.RANDOM_PORT) {
propertySourceProperties.add("server.port=0");
}
else if (webEnvironment == WebEnvironment.NONE) {
propertySourceProperties.add("spring.main.web-application-type=none");
}
}
/**