【问题标题】:Disable servlet filters for unit tests为单元测试禁用 servlet 过滤器
【发布时间】:2020-09-29 14:56:34
【问题描述】:

在 Spring Boot 应用程序中,我使用 MockMvc 对控制器进行单元测试。我有一个 servlet 过滤器,它需要为每个请求运行,但我想在运行单元测试并通过 MockMvc 发出请求时忽略它。

原因是我的过滤器是@Component,它有另一个bean @Autowired(称为theBean),当单元测试运行时,其中一些失败,因为如果theBean 不在上下文中其中一些通过,因为控制器也使用theBean

我要做的是在使用 MockMvc 运行 MVC 测试时禁用 servlet 过滤器,有什么想法吗?

【问题讨论】:

    标签: spring-boot spring-mvc servlet-filters


    【解决方案1】:

    您可以为过滤器类使用条件 bean 表达式

    `@ConditionalOnProperty(name = "spring.profile.test", matchIfMissing = true)`
    

    在属性文件中将 spring.profile.test 设置为 true

    【讨论】:

      【解决方案2】:

      如果您对禁用所有过滤器的选项感到满意,那么您可以将参数 addFilters 作为 false 传递给 @AutoConfigureMockMvc。 像这样:

      @AutoConfigureMockMvc(addFilters = false)
      public class ControllerTest {
      
          @Autowired
          private MockMvc mockMvc;
      }
      

      您可以在此处找到相关文档:

      https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/autoconfigure/web/servlet/AutoConfigureMockMvc.html#addFilters--

      【讨论】:

        猜你喜欢
        • 2011-02-03
        • 2016-09-29
        • 2018-09-09
        • 2015-08-05
        • 1970-01-01
        • 1970-01-01
        • 2013-04-07
        • 1970-01-01
        • 2021-11-25
        相关资源
        最近更新 更多