Spring Testing Mock MVC不应用自定义RequestMappingHandlerMapping

问题描述 投票:2回答:1

我已经为我的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。

java spring spring-boot spring-mvc mockmvc
1个回答
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自动配置。

© www.soinside.com 2019 - 2024. All rights reserved.