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

时间:2016-08-03 14:44:18

标签: java spring testing spring-boot

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

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

3 个答案:

答案 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();
}