Spring Testing Mock MVC не применяет пользовательский RequestMappingHandlerMapping - PullRequest
2 голосов
/ 08 марта 2019

Я создал пользовательскую аннотацию для версии своих 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 все изменения конфигурации будут приняты по умолчанию.

EDIT 1:

Я также должен добавить, что я использую Spring Boot 2.1.2.RELEASE

EDIT 2: чтобы уточнить, аннотация управления версиями при применении к контроллеру принимает запрос, который начинается с версии, то есть: /users становится /v1/users

Это работает нормальнозапросы приходят, но только для тестов /users работа, /v1/users возвращает 404 (не найдено)

Я поместил точки отладки в конфиги и пользовательский RequestMappingHandlerMapping и уверен, что этоMockMvc.

не обрабатывается. Я попытался автоматически подключить MockMvc, но то же поведение сохраняется, но возникает дополнительная проблема, связанная с невозможностью настройки Spring RestDocs.

1 Ответ

0 голосов
/ 08 марта 2019

@ 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.

...