2

Название объясняет мой вопрос 100%. Предположим, что в Spring Boot/MVC указан аннотированный класс @ControllerAdvice. В моем случае он содержит @ExceptionHandler аннотации. Хорошо, я могу выполнить unit-тест этого класса (он возвращает форматированный JSON с информацией из класса Exception). Это легко - особенно при использовании Spock.Как сделать интеграционные тесты в Spring Controller Advice

Но как насчет интеграционных тестов? Единственный способ проверить правильность использования библиотеки Spring - создать контроллер, который существует только для целей тестирования, добавить к нему некоторые методы, например. исключить конкретный вид и посмотреть, вернет ли он то, что я разработал, чтобы вернуть. Но кажется уродливым - создание дополнительного кода только для тестирования существующего кода.

Так что мои вопросы - как вы проводите интеграционные тесты на @ControllerAdvice? Вы просто этого не делаете, создайте специальный контроллер только для тестирования @ControllerAdvice или просто протестируйте его с помощью существующего контроллера, предоставляя его, например, с неправильными данными, что приведет к тому, что будет выбрано исключение (в моем случае, если это было @InitBinder методов, мы проверим ModelAndView)?

ответ

0

Для тестирования интеграции в Spring Framework тест должен сделать следующее:

  • Instantiate контекст приложения. В вашем случае контекст приложения должен содержать контроллер и советы контроллера
  • Сделать запрос на HTTP конечной точке, определенной контроллером
  • Утверждай результаты

Вы можете найти более подробную информацию о тестировании интеграции в Весна здесь: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#spring-mvc-test-framework

+0

Я знаю это, но в вашем решении есть контроллер. И мой вопрос: должен ли я создавать отдельный контроллер для тестирования классов @ControllerAdvice или использовать существующие? – Chlebik

+0

Я бы не создавал новый контроллер только для тестирования рекомендаций, почему бы не использовать существующие? Таким образом, вы можете проверить рекомендации с фактическим потоком, предназначенным для работы в приложении. –

+0

Давайте просто предположим, что я хочу проверить обработчик для ValidationException. Единственное место в моем приложении - это когда я пытаюсь получить доступ к внешней системе, получить некоторые данные, затем создать объект и проверить его. Это делается в основном в бобах '@ Service'. Итак, как вы предлагаете моделировать такую ​​ситуацию с использованием существующих контроллеров во время тестирования интеграции? – Chlebik

 Смежные вопросы

  • Нет связанных вопросов^_^