Spring boot MVC имитация проблем с сервером

С целью тестирования мне потребовалось имитировать проблему сервера, не возвращающего ответ.

Но при использовании фреймворка spring это не так просто - он разработан с точки зрения надежности и мы всегда вернем какой-то HTTP-ответ, что бы ни произошло в приложении.

Однако мы можем получить желаемое поведение, если закроем сам endpoint в обработчике запросов контроллера:

    @RequestMapping(...)
    @ResponseBody
    public byte[] processRequest(...
                                     final HttpServletRequest request,
                                     final HttpServletResponse response) {
        ...
        ((Response) response).getHttpChannel().getEndPoint().close();
        ...
    }

Кстати, сам этот тестирующий код был встроен в сервер как интерсептор, что позволило во-1х никак не изменять классы сервера, а во-2х иметь простой способ, меняя spring-конфигурацию сервера, добавлять или убирать необходимый для тестов код.

В этой статье описано, как это сделано

Опубликовано February 11, 2018