Не удается правильно проверить ErrorController Spring Boot - PullRequest
0 голосов
/ 22 октября 2018

из-за этого урока - https://www.baeldung.com/spring-boot-custom-error-page Я хотел настроить страницу ошибки, т.е.когда кто-то заходит на www.myweb.com/blablablalb3, я хочу вернуть страницу с текстом «неправильный URL-запрос».Все отлично работает:

@Controller
public class ApiServerErrorController implements ErrorController {

    @Override
    public String getErrorPath() {
        return "error";
    }

    @RequestMapping("/error")
    public String handleError() {
        return "forward:/error-page.html";
    }
}

Но я не знаю, как это проверить:

@Test
    public void makeRandomRequest__shouldReturnErrorPage() throws Exception {
        this.mockMvc.perform(get(RANDOM_URL))
                .andDo(print());

    }

print () возвращает:

MockHttpServletResponse:
           Status = 404
    Error message = null
          Headers = {X-Application-Context=[application:integration:-1]}
     Content type = null
             Body = 
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

Так что я не могу что-то создатькак это:

.andExpect(forwardedUrl("error-page"));

, потому что это не удается, но при ручном тестировании возвращается страница с ошибкой.

1 Ответ

0 голосов
/ 05 ноября 2018

Тестирование пользовательского ErrorController с MockMvc, к сожалению, не поддерживается.

Подробное объяснение см. В официальной рекомендации команды Spring Boot ( source ).

Чтобы быть уверенным, что любая обработка ошибок работает полностью, необходимо задействовать контейнер сервлета в этом тестировании, поскольку он отвечает за регистрацию страницы ошибок и т. Д. Даже если сам MockMvc или расширение Boot для MockMvc разрешают пересылкуна странице ошибок вы будете тестировать инфраструктуру тестирования, а не сценарий реального мира, который вас действительно интересует.

Наша рекомендация для тестов, которые хотят убедиться, что обработка ошибок работает правильно,использовать встроенный контейнер и тестировать с помощью WebTestClient, RestAssured или TestRestTemplate.

...