Merge pull request #27823 from quaff
* pr/27823: Include WebMvcRegistrations beans in WebMvcTest Closes gh-27823
This commit is contained in:
commit
657b8cea51
|
@ -368,7 +368,7 @@ include::{docs-java}/features/testing/springbootapplications/jsontests/MyJsonAss
|
||||||
[[features.testing.spring-boot-applications.spring-mvc-tests]]
|
[[features.testing.spring-boot-applications.spring-mvc-tests]]
|
||||||
==== Auto-configured Spring MVC Tests
|
==== Auto-configured Spring MVC Tests
|
||||||
To test whether Spring MVC controllers are working as expected, use the `@WebMvcTest` annotation.
|
To test whether Spring MVC controllers are working as expected, use the `@WebMvcTest` annotation.
|
||||||
`@WebMvcTest` auto-configures the Spring MVC infrastructure and limits scanned beans to `@Controller`, `@ControllerAdvice`, `@JsonComponent`, `Converter`, `GenericConverter`, `Filter`, `HandlerInterceptor`, `WebMvcConfigurer`, and `HandlerMethodArgumentResolver`.
|
`@WebMvcTest` auto-configures the Spring MVC infrastructure and limits scanned beans to `@Controller`, `@ControllerAdvice`, `@JsonComponent`, `Converter`, `GenericConverter`, `Filter`, `HandlerInterceptor`, `WebMvcConfigurer`, `WebMvcRegistrations`, and `HandlerMethodArgumentResolver`.
|
||||||
Regular `@Component` and `@ConfigurationProperties` beans are not scanned when the `@WebMvcTest` annotation is used.
|
Regular `@Component` and `@ConfigurationProperties` beans are not scanned when the `@WebMvcTest` annotation is used.
|
||||||
`@EnableConfigurationProperties` can be used to include `@ConfigurationProperties` beans.
|
`@EnableConfigurationProperties` can be used to include `@ConfigurationProperties` beans.
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ import java.util.Collections;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.springframework.boot.autoconfigure.web.servlet.WebMvcRegistrations;
|
||||||
import org.springframework.boot.context.TypeExcludeFilter;
|
import org.springframework.boot.context.TypeExcludeFilter;
|
||||||
import org.springframework.boot.jackson.JsonComponent;
|
import org.springframework.boot.jackson.JsonComponent;
|
||||||
import org.springframework.boot.test.autoconfigure.filter.StandardAnnotationCustomizableTypeExcludeFilter;
|
import org.springframework.boot.test.autoconfigure.filter.StandardAnnotationCustomizableTypeExcludeFilter;
|
||||||
|
@ -43,6 +44,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
*
|
*
|
||||||
* @author Phillip Webb
|
* @author Phillip Webb
|
||||||
* @author Madhura Bhave
|
* @author Madhura Bhave
|
||||||
|
* @author Yanming Zhou
|
||||||
* @since 2.2.1
|
* @since 2.2.1
|
||||||
*/
|
*/
|
||||||
public final class WebMvcTypeExcludeFilter extends StandardAnnotationCustomizableTypeExcludeFilter<WebMvcTest> {
|
public final class WebMvcTypeExcludeFilter extends StandardAnnotationCustomizableTypeExcludeFilter<WebMvcTest> {
|
||||||
|
@ -60,6 +62,7 @@ public final class WebMvcTypeExcludeFilter extends StandardAnnotationCustomizabl
|
||||||
includes.add(ControllerAdvice.class);
|
includes.add(ControllerAdvice.class);
|
||||||
includes.add(JsonComponent.class);
|
includes.add(JsonComponent.class);
|
||||||
includes.add(WebMvcConfigurer.class);
|
includes.add(WebMvcConfigurer.class);
|
||||||
|
includes.add(WebMvcRegistrations.class);
|
||||||
includes.add(javax.servlet.Filter.class);
|
includes.add(javax.servlet.Filter.class);
|
||||||
includes.add(FilterRegistrationBean.class);
|
includes.add(FilterRegistrationBean.class);
|
||||||
includes.add(DelegatingFilterProxyRegistrationBean.class);
|
includes.add(DelegatingFilterProxyRegistrationBean.class);
|
||||||
|
|
|
@ -22,6 +22,7 @@ import com.fasterxml.jackson.databind.module.SimpleModule;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.thymeleaf.dialect.IDialect;
|
import org.thymeleaf.dialect.IDialect;
|
||||||
|
|
||||||
|
import org.springframework.boot.autoconfigure.web.servlet.WebMvcRegistrations;
|
||||||
import org.springframework.context.annotation.ComponentScan.Filter;
|
import org.springframework.context.annotation.ComponentScan.Filter;
|
||||||
import org.springframework.context.annotation.FilterType;
|
import org.springframework.context.annotation.FilterType;
|
||||||
import org.springframework.core.type.classreading.MetadataReader;
|
import org.springframework.core.type.classreading.MetadataReader;
|
||||||
|
@ -43,6 +44,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||||
* Tests for {@link WebMvcTypeExcludeFilter}.
|
* Tests for {@link WebMvcTypeExcludeFilter}.
|
||||||
*
|
*
|
||||||
* @author Phillip Webb
|
* @author Phillip Webb
|
||||||
|
* @author Yanming Zhou
|
||||||
*/
|
*/
|
||||||
class WebMvcTypeExcludeFilterTests {
|
class WebMvcTypeExcludeFilterTests {
|
||||||
|
|
||||||
|
@ -55,6 +57,7 @@ class WebMvcTypeExcludeFilterTests {
|
||||||
assertThat(excludes(filter, Controller2.class)).isFalse();
|
assertThat(excludes(filter, Controller2.class)).isFalse();
|
||||||
assertThat(excludes(filter, ExampleControllerAdvice.class)).isFalse();
|
assertThat(excludes(filter, ExampleControllerAdvice.class)).isFalse();
|
||||||
assertThat(excludes(filter, ExampleWeb.class)).isFalse();
|
assertThat(excludes(filter, ExampleWeb.class)).isFalse();
|
||||||
|
assertThat(excludes(filter, ExampleWebMvcRegistrations.class)).isFalse();
|
||||||
assertThat(excludes(filter, ExampleMessageConverter.class)).isFalse();
|
assertThat(excludes(filter, ExampleMessageConverter.class)).isFalse();
|
||||||
assertThat(excludes(filter, ExampleService.class)).isTrue();
|
assertThat(excludes(filter, ExampleService.class)).isTrue();
|
||||||
assertThat(excludes(filter, ExampleRepository.class)).isTrue();
|
assertThat(excludes(filter, ExampleRepository.class)).isTrue();
|
||||||
|
@ -72,6 +75,7 @@ class WebMvcTypeExcludeFilterTests {
|
||||||
assertThat(excludes(filter, Controller2.class)).isTrue();
|
assertThat(excludes(filter, Controller2.class)).isTrue();
|
||||||
assertThat(excludes(filter, ExampleControllerAdvice.class)).isFalse();
|
assertThat(excludes(filter, ExampleControllerAdvice.class)).isFalse();
|
||||||
assertThat(excludes(filter, ExampleWeb.class)).isFalse();
|
assertThat(excludes(filter, ExampleWeb.class)).isFalse();
|
||||||
|
assertThat(excludes(filter, ExampleWebMvcRegistrations.class)).isFalse();
|
||||||
assertThat(excludes(filter, ExampleMessageConverter.class)).isFalse();
|
assertThat(excludes(filter, ExampleMessageConverter.class)).isFalse();
|
||||||
assertThat(excludes(filter, ExampleService.class)).isTrue();
|
assertThat(excludes(filter, ExampleService.class)).isTrue();
|
||||||
assertThat(excludes(filter, ExampleRepository.class)).isTrue();
|
assertThat(excludes(filter, ExampleRepository.class)).isTrue();
|
||||||
|
@ -89,6 +93,7 @@ class WebMvcTypeExcludeFilterTests {
|
||||||
assertThat(excludes(filter, Controller2.class)).isTrue();
|
assertThat(excludes(filter, Controller2.class)).isTrue();
|
||||||
assertThat(excludes(filter, ExampleControllerAdvice.class)).isTrue();
|
assertThat(excludes(filter, ExampleControllerAdvice.class)).isTrue();
|
||||||
assertThat(excludes(filter, ExampleWeb.class)).isTrue();
|
assertThat(excludes(filter, ExampleWeb.class)).isTrue();
|
||||||
|
assertThat(excludes(filter, ExampleWebMvcRegistrations.class)).isTrue();
|
||||||
assertThat(excludes(filter, ExampleMessageConverter.class)).isTrue();
|
assertThat(excludes(filter, ExampleMessageConverter.class)).isTrue();
|
||||||
assertThat(excludes(filter, ExampleService.class)).isTrue();
|
assertThat(excludes(filter, ExampleService.class)).isTrue();
|
||||||
assertThat(excludes(filter, ExampleRepository.class)).isTrue();
|
assertThat(excludes(filter, ExampleRepository.class)).isTrue();
|
||||||
|
@ -106,6 +111,7 @@ class WebMvcTypeExcludeFilterTests {
|
||||||
assertThat(excludes(filter, Controller2.class)).isFalse();
|
assertThat(excludes(filter, Controller2.class)).isFalse();
|
||||||
assertThat(excludes(filter, ExampleControllerAdvice.class)).isFalse();
|
assertThat(excludes(filter, ExampleControllerAdvice.class)).isFalse();
|
||||||
assertThat(excludes(filter, ExampleWeb.class)).isFalse();
|
assertThat(excludes(filter, ExampleWeb.class)).isFalse();
|
||||||
|
assertThat(excludes(filter, ExampleWebMvcRegistrations.class)).isFalse();
|
||||||
assertThat(excludes(filter, ExampleMessageConverter.class)).isFalse();
|
assertThat(excludes(filter, ExampleMessageConverter.class)).isFalse();
|
||||||
assertThat(excludes(filter, ExampleService.class)).isTrue();
|
assertThat(excludes(filter, ExampleService.class)).isTrue();
|
||||||
assertThat(excludes(filter, ExampleRepository.class)).isFalse();
|
assertThat(excludes(filter, ExampleRepository.class)).isFalse();
|
||||||
|
@ -121,6 +127,7 @@ class WebMvcTypeExcludeFilterTests {
|
||||||
assertThat(excludes(filter, Controller2.class)).isFalse();
|
assertThat(excludes(filter, Controller2.class)).isFalse();
|
||||||
assertThat(excludes(filter, ExampleControllerAdvice.class)).isFalse();
|
assertThat(excludes(filter, ExampleControllerAdvice.class)).isFalse();
|
||||||
assertThat(excludes(filter, ExampleWeb.class)).isFalse();
|
assertThat(excludes(filter, ExampleWeb.class)).isFalse();
|
||||||
|
assertThat(excludes(filter, ExampleWebMvcRegistrations.class)).isFalse();
|
||||||
assertThat(excludes(filter, ExampleMessageConverter.class)).isFalse();
|
assertThat(excludes(filter, ExampleMessageConverter.class)).isFalse();
|
||||||
assertThat(excludes(filter, ExampleService.class)).isTrue();
|
assertThat(excludes(filter, ExampleService.class)).isTrue();
|
||||||
assertThat(excludes(filter, ExampleRepository.class)).isTrue();
|
assertThat(excludes(filter, ExampleRepository.class)).isTrue();
|
||||||
|
@ -180,6 +187,10 @@ class WebMvcTypeExcludeFilterTests {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class ExampleWebMvcRegistrations implements WebMvcRegistrations {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static class ExampleMessageConverter extends MappingJackson2HttpMessageConverter {
|
static class ExampleMessageConverter extends MappingJackson2HttpMessageConverter {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue