我已经为我的API版本创建了一个Custom注释。
运行应用程序时一切正常。
然而,当我尝试使用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自动配置。