java - Spring Testing Mock MVC 不应用自定义 RequestMappingHandlerMapping

标签 java spring spring-boot spring-mvc mockmvc

我已经创建了一个自定义注解来对我的 API 进行版本控制。

运行应用程序时一切正常。

但是,当我尝试使用 MockMvc 测试我的 Controller 时,我编写的自定义 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: 澄清一下,应用于 Controller 的版本注释接受以版本开头的请求,即:/users 变为 /v1/users

这适用于即将到来的正常请求,但对于测试仅 /users 有效,/v1/users 返回 404(未找到)

我在配置和自定义 RequestMappingHandlerMapping 中放置了调试点,并确保 MockMvc 不会拾取它。

我已经尝试 Autowiring 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 自动配置。

关于java - Spring Testing Mock MVC 不应用自定义 RequestMappingHandlerMapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55056013/

相关文章:

java - 从 Spring Security 捕获 "CommunicationException"

java - Spring 和 hibernate 错误 "Declaring class is not found in the inheritance state hierarchy"

eclipse - 无法启动 Spring Boot : Failed to read candidate component

java - 如何在 Spring Boot 中配置自定义 AccessDecisionManager 和自定义 AuthenticationProvider

spring - 通过字段 'jdbcTemplate' 表示不满意的依赖关系

java - 我对项目 Euler#8 的答案是错误的

java - 错误 java.lang.IllegalStateException : Position invalid

java - last.fm java API 获取数据范围内用户的最近轨迹

java - 添加 @after 钩子(Hook)会影响包中的所有测试

java - Spring AOP 建议使用方法而不是 @annotation : Why?