在迁移到Spring Boot 2.1之前,我们@WebMvcTest结合以下服务在我们的服务中进行了一些控制器测试@AutoConfigureMockMvc:
@WebMvcTest
@AutoConfigureMockMvc
@WebMvcTest(SomeController.class) @AutoConfigureMockMvc(secure = false) public class SomeControllerTests { ... }
这样的结果是禁用了Spring Security配置,并且您可以在不模拟OAuth / JWT的情况下运行MVC测试。
在Spring Boot 2.1中,该secured属性已弃用,发行说明中提到:
secured
[…] @WebMvcTest寻找一个WebSecurityConfigurer bean […]。
为了避免过时的secured属性和我们的加载,WebSecurityConfigurer我们将测试重写为:
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 2.1开始,如果您具有Spring Security,则将使用自定义配置来保护测试的安全。实际的问题是什么?
如果您不想为某些测试进行身份验证,只需使用Spring Security的测试基础架构并添加即可@WithMockUser。
@WithMockUser