【问题标题】:Spring Boot 2.1 - @WebMvcTest without Spring Security Auto-ConfigurationSpring Boot 2.1 - 没有 Spring Security 自动配置的 @WebMvcTest
【发布时间】:2018-11-20 09:20:44
【问题描述】:

在迁移到 Spring Boot 2.1 之前,我们在服务中使用 @WebMvcTest 和 @AutoConfigureMockMvc 进行了一些控制器测试:

@WebMvcTest(SomeController.class)
@AutoConfigureMockMvc(secure = false)
public class SomeControllerTests { ... }

这会导致 Spring Security 配置被禁用,您可以在不模拟 OAuth/JWT 的情况下运行 MVC 测试。

在 Spring Boot 2.1 中,secured 属性已被弃用,发行说明中提到

[...] @WebMvcTest 查找 WebSecurityConfigurer bean [...]。

为了避免被弃用的secured 属性和WebSecurityConfigurer 的加载,我们将测试重写为:

@WebMvcTest(
    value = SomeController.class,
    excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = WebSecurityConfigurer.class),
    excludeAutoConfiguration = MockMvcSecurityAutoConfiguration.class)
public class SomeControllerTests { ... }

问题是:Spring Boot 2.1 中是否有更紧凑的方式来定义此类测试?

【问题讨论】:

    标签: spring-boot


    【解决方案1】:

    是的,与其解决该标志已被弃用的事实,您应该接受这样一个事实,即这正朝着这个方向前进。

    从 Spring Boot 2.1 开始,如果您有 Spring Security,您的测试将使用您的自定义配置来保护。真正的问题是什么?

    如果您不想对某些测试进行身份验证,只需使用 Spring Security 的测试基础架构并添加 @WithMockUser。

    【讨论】:

    • 我们的服务使用 Spring Security OAuth2 运行。我没有详细了解,但我认为在那种情况下@WithMockUser 不会有太大帮助。但无论如何,谢谢,我不确定我们是否走在正确的轨道上。
    • 切片的想法是只启用必要的东西。所以我不想接受激活比我需要的更多的代码。
    • 切片的想法是启用对应用程序的特定层有意义的东西。如果您不同意为 Web 测试启用安全性,您可以随时创建自己的切片。
    • 很遗憾,即使测试不需要数据库基础设施,因为我模拟了服务,但由于这种变化,现在需要这样做。也许我会尝试为测试创建一个不依赖此基础架构的安全配置,并找到一种方法让生产环境在测试中被忽略。
    • 默认情况下包含安全性来测试 Web 层感觉不对。我不确定这是否是春天前进的正确方向。
    【解决方案2】:

    遇到了同样的情况,使用下面的注释而不是 @WebMvcTest 有帮助。在这种情况下,@WithMockUser 没有帮助。

    @WebAppConfiguration
    @Import({MockMvcAutoConfiguration.class})
    @EnableConfigurationProperties({ResourceProperties.class, WebMvcProperties.class})
    

    存在于@WebMvcTest 的controllers / value 中的类进入value 的value 注释。

    来源:https://github.com/spring-projects/spring-boot/issues/14227#issuecomment-688824627

    【讨论】:

    • 你用什么来代替 this.mockMvc 即自动装配的 MockMvc... 因为当你取出 @WebMvcTest 时它是空的?
    猜你喜欢
    • 2018-05-15
    • 1970-01-01
    • 2014-07-25
    • 2013-11-01
    • 1970-01-01
    • 2014-12-07
    • 2021-06-29
    • 2017-01-27
    • 2016-09-08
    相关资源
    最近更新 更多