如何使用@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