【问题标题】:How can I use @WebMvcTest and also add in my own custom filters?如何使用 @WebMvcTest 并添加我自己的自定义过滤器?
【发布时间】:2016-08-03 14:44:18
【问题描述】:

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

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

【问题讨论】:

    标签: java spring testing spring-boot


    【解决方案1】:

    @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 将自动提供与安全过滤器的集成。

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

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

    【讨论】:

      【解决方案2】:

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

      @Autowired
      private WebApplicationContext context;
      
      @Autowired
      private FilterChainProxy springSecurityFilter;
      
      @Before
      public void setup() {
          mockMvc = MockMvcBuilders
                  .webAppContextSetup(context)
                  .addFilters(springSecurityFilter)
                  .apply(SecurityMockMvcConfigurers.springSecurity())
                  .build();
      }
      

      【讨论】:

        【解决方案3】:

        @WebMvcTest 与 Spring Security 和自定义过滤器一起使用时,它将自动配置到 MockMvc 实例中。你可以在rwinch/spring-boot-sample/tree/so-38746850-webmvctest-customfilters 看到这个工作。具体来说,DemoApplicationTests 表明 Spring Security 已正确设置并且自定义过滤器已设置。

        Spring Boot 会自动添加所有使用 SpringBootMockMvcBuilderCustomizer.addFilters 设置的 Filter

        MockMvcSecurityConfiguration 用于设置 Spring Security 的测试支持(即允许通过将 Spring Security 的 SecurityMockMvcRequestPostProcessors.testSecurityContext() 添加到 MockMvc 实例来使用 @MockUser

        【讨论】:

          猜你喜欢
          • 2020-05-03
          • 2020-02-14
          • 1970-01-01
          • 1970-01-01
          • 2016-06-25
          • 2020-01-10
          • 1970-01-01
          • 2018-02-17
          • 1970-01-01
          相关资源
          最近更新 更多