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 自动配置。