如何使用@WebMvcTest并添加我自己的自定义filter?
Spring Boot 1.4添加了@WebMvcTest
,它连接了测试我的应用程序的Web片段所需的部件。 这太棒了,但我也想确保我的自定义filter和安全代码已连线,这样我就可以validation它是否正常工作。
使用@WebMvcTest
时如何添加自定义filter?
@AutoConfigureWebMvc
当前导入以下自动配置类(请参阅spring-boot-test-autoconfigure
jar中的spring.factories
):
# AutoConfigureMockMvc auto-configuration imports org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc=\ org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration,\ org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityAutoConfiguration,\ org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration,\ org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration
在此列表中, MockMvcSecurityAutoConfiguration
将自动提供与安全filter的集成。
如果您需要添加对其他filter的支持,您可以编写自己的MockMvcBuilderCustomizer
(请参阅MockMvcSecurityConfiguration.SecurityMockMvcBuilderCustomizer
获取灵感)。
您可以使用嵌套的@TestConfiguration
类将定制器挂钩到特定测试中,您可以添加自己的spring.factories
并使用AutoConfigureMockMvc
键自动将其添加到所有测试中。
除了Spring引导选项@Phil Webb指出,你可以使用普通的Spting Frameworkfunction并执行以下操作:
@Autowired private WebApplicationContext context; @Autowired private FilterChainProxy springSecurityFilter; @Before public void setup() { mockMvc = MockMvcBuilders .webAppContextSetup(context) .addFilters(springSecurityFilter) .apply(SecurityMockMvcConfigurers.springSecurity()) .build(); }
将@WebMvcTest
与Spring Security和自定义Filter一起使用时,它将自动配置到MockMvc
实例中。 你可以在rwinch / spring-boot-sample / tree / so-38746850-webmvctest-customfilters中看到这个。 具体来说, DemoApplicationTests演示了Spring Security是否正确设置并设置了自定义filter。
Spring Boot会自动添加使用SpringBootMockMvcBuilderCustomizer.addFilters设置的所有Filter
。
MockMvcSecurityConfiguration用于设置Spring Security的测试支持(即允许通过将Spring Security的SecurityMockMvcRequestPostProcessors.testSecurityContext()
到MockMvc
实例来使用MockMvc
。