如何使用@WebMvcTest并添加我自己的自定义过滤器?

che*_*tts 7 java testing spring spring-boot

Spring Boot 1.4补充@WebMvcTest说,连接部件需要测试我的应用程序的Web片段.这太棒了,但我也想确保我的自定义过滤器和安全代码已连线,这样我就可以验证它是否正常工作.

如何在使用时添加自定义过滤器@WebMvcTest

Phi*_*ebb 5

@AutoConfigureWebMvc目前导入以下自动配置类(见spring.factoriesspring-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
Run Code Online (Sandbox Code Playgroud)

超出此列表MockMvcSecurityAutoConfiguration将自动提供与安全筛选器的集成.

如果您需要添加对其他过滤器的支持,您可以自己编写MockMvcBuilderCustomizer(请参阅MockMvcSecurityConfiguration.SecurityMockMvcBuilderCustomizer获取灵感).

您可以使用嵌套@TestConfiguration类将自定义程序挂钩到特定测试中,您可以添加自己的类spring.factories并使用该AutoConfigureMockMvc键自动将其添加到所有测试中.


lub*_*nac 2

除了 @Phil Webb 指出的 Spring Boot 选项之外,您还可以使用普通的 Spting 框架功能并执行如下操作:

@Autowired
private WebApplicationContext context;

@Autowired
private FilterChainProxy springSecurityFilter;

@Before
public void setup() {
    mockMvc = MockMvcBuilders
            .webAppContextSetup(context)
            .addFilters(springSecurityFilter)
            .apply(SecurityMockMvcConfigurers.springSecurity())
            .build();
}
Run Code Online (Sandbox Code Playgroud)