Spring 测试模拟 MVC 不应用自定义 RequestMappingHandlerMapping
Spring Testing Mock MVC doesn't apply custom 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
returns 404(未找到)
我已经在配置和自定义 RequestMappingHandlerMapping
中放置了调试点,并且确信 MockMvc
不会拾取它。
我试过自动装配 MockMvc,但同样的行为仍然存在,还有一个问题是无法配置 Spring RestDocs。
@AutoConfigureMockMvc Annotation that can be applied to a test class to enable and configure auto-configuration of MockMvc.
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class DemoApplicationTests {
@Autowired
private MockMvc mockMvc;
@Test
public void contextLoads() {
System.out.println("test "+mockMvc);
}
}
注意:我应用了自定义 RequestMappingHandlerMapping,它正在成功应用 MockMvc 自动配置。
我已经创建了自定义注释来控制我的 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
returns 404(未找到)
我已经在配置和自定义 RequestMappingHandlerMapping
中放置了调试点,并且确信 MockMvc
不会拾取它。
我试过自动装配 MockMvc,但同样的行为仍然存在,还有一个问题是无法配置 Spring RestDocs。
@AutoConfigureMockMvc Annotation that can be applied to a test class to enable and configure auto-configuration of MockMvc.
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class DemoApplicationTests {
@Autowired
private MockMvc mockMvc;
@Test
public void contextLoads() {
System.out.println("test "+mockMvc);
}
}
注意:我应用了自定义 RequestMappingHandlerMapping,它正在成功应用 MockMvc 自动配置。