java - Spring Testing Mock MVC 不应用自定义 RequestMappingHandlerMapping
问题描述
我创建了一个自定义注释来对我的 API 进行版本控制。
运行应用程序时一切正常。
但是,当我尝试使用 测试我的控制器时MockMvc
,我编写的自定义RequestMappingHandlerMapping
没有被应用。
我正在MockMvc
这样初始化
@Before
public void setup() {
mockMvc = MockMvcBuilders
.webAppContextSetup(webApplicationContext)
.apply(documentationConfiguration(this.restDocumentation))
.apply(springSecurity())
.build();
}
我覆盖默认值以RequestMappingHandlerMapping
像这样使用我的自定义
@Configuration
public class RoutingConfig {
@Bean
public WebMvcRegistrations webMvcRegistrationsPathHandlerMapping() {
return new WebMvcRegistrations() {
@Override
public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
return new APIPathRequestHandlerMapping();
}
};
}
}
知道发生了什么吗?我认为MockMvc
默认情况下,Web 应用程序上下文初始化会获取所有配置更改。
编辑1:
我还应该补充一点,我正在使用 Spring Boot 2.1.2.RELEASE
编辑2:为了澄清,版本控制注释在应用于控制器时接受以版本开头的请求,即:/users
变为/v1/users
这适用于正常请求,但仅/users
适用于测试,/v1/users
返回 404(未找到)
我已经在配置和自定义中放置了调试点,RequestMappingHandlerMapping
并且确信这不会被MockMvc
.
我尝试自动装配 MockMvc,但同样的行为仍然存在,另外一个问题是无法配置 Spring RestDocs。
解决方案
@AutoConfigureMockMvc注解,可应用于测试类以启用和配置 MockMvc 的自动配置。
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class DemoApplicationTests {
@Autowired
private MockMvc mockMvc;
@Test
public void contextLoads() {
System.out.println("test "+mockMvc);
}
}
注意:我应用了自定义 RequestMappingHandlerMapping,它正在成功应用 MockMvc 自动配置。
推荐阅读
- reactjs - 使用 Jest 测试/模拟 ReactComponent SVG 导入
- reactjs - React Route 陷入无限循环
- javascript - 如何在提交 Django 表单之前执行功能
- javascript - 在按钮点击时调用一个确定的参数
- linux - 使用“for”对齐配对的末端序列
- html - 当我使用 box-shadow 时,弹出图像的左侧出现一条水平线,启用 flex 时出现问题
- html - JQuery 不适用于电子框架
- c - 这是检查 IP(字符串)是否属于 CIDR(字符串)的最快方法吗?
- java - Java - 如何调用泛型实例方法
- javascript - 如何根据相应的 x 值对二维数组的 y 值求和?