在迁移到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中是否有更紧凑的方法来定义此类测试?
答案 0 :(得分:4)
是的,您应该接受这样的事实,那就是朝着这个方向发展,而不是解决该标志已被弃用的事实。
从Spring Boot 2.1开始,如果您具有Spring Security,则将使用自定义配置来保护测试的安全。实际的问题是什么?
如果您不想为某些测试进行身份验证,只需使用Spring Security的测试基础结构并添加@WithMockUser
。
答案 1 :(得分:0)
遇到相同的情况,而使用以下注释而不是@WebMvcTest
的方法是有帮助的。在这种情况下,@WithMockUser
没有帮助。
@WebAppConfiguration
@Import({MockMvcAutoConfiguration.class})
@EnableConfigurationProperties({ResourceProperties.class, WebMvcProperties.class})
在controllers
的{{1}} / value
中存在的类进入@WebMvcTest
注释的value
中。
来源:https://github.com/spring-projects/spring-boot/issues/14227#issuecomment-688824627