簡體   English   中英

春季測試模擬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。

編輯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自動配置一起應用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM