我创建了一个自定义注释以对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。
答案 0 :(得分:0)
@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自动配置。