Spring Boot 1.4添加了@WebMvcTest
,它连接了测试我的应用程序的Web片段所需的部分。这太棒了,但是我也想确保我的自定义过滤器和安全代码已经连线,这样我就可以验证它是否正常工作。
使用@WebMvcTest
时如何添加自定义过滤器?
答案 0 :(得分:5)
@AutoConfigureWebMvc
目前导入以下自动配置类(请参阅spring.factories
jar中的spring-boot-test-autoconfigure
):
# 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
将自动提供与安全过滤器的集成。
如果您需要添加对其他过滤器的支持,您可以编写自己的MockMvcBuilderCustomizer
(请参阅MockMvcSecurityConfiguration.SecurityMockMvcBuilderCustomizer
获取灵感)。
您可以使用嵌套的@TestConfiguration
类将自定义程序挂钩到特定的测试中,您可以添加自己的spring.factories
并使用AutoConfigureMockMvc
键自动将其添加到所有测试中
答案 1 :(得分:2)
将@WebMvcTest
与Spring Security和自定义过滤器一起使用时,它将自动配置到MockMvc
实例中。你可以在rwinch/spring-boot-sample/tree/so-38746850-webmvctest-customfilters看到这个。具体来说,DemoApplicationTests表明正确设置了Spring Security并设置了自定义过滤器。
Spring Boot会自动添加使用SpringBootMockMvcBuilderCustomizer.addFilters设置的所有Filter
。
MockMvcSecurityConfiguration用于设置Spring Security的测试支持(即允许使用@MockUser
将Spring Security的SecurityMockMvcRequestPostProcessors.testSecurityContext()
添加到MockMvc
实例。
答案 2 :(得分:1)
除了Spring引导选项@Phil Webb指出,您可以使用简单的Spting Framework功能并执行以下操作:
@Autowired
private WebApplicationContext context;
@Autowired
private FilterChainProxy springSecurityFilter;
@Before
public void setup() {
mockMvc = MockMvcBuilders
.webAppContextSetup(context)
.addFilters(springSecurityFilter)
.apply(SecurityMockMvcConfigurers.springSecurity())
.build();
}