Spring TEST REST Controller (использует / производит JSON) - без базы данных, в автономном режиме - с использованием Mockito - PullRequest
1 голос
/ 06 февраля 2012

Этот вопрос находится рядом с вопросом , который я задавал здесь . В этом вопросе я хочу сосредоточиться на способах тестирования контроллера REST Spring .

В настоящее время я настроил тестирование следующим образом: используйте spring-test-mvc инфраструктуру с базой данных, которая в основном выполняет сквозное тестирование .

Я хочу избавиться от слоя базы данных. Зачем? Мне действительно нужен слой базы данных? Разве я не могу издеваться над базой данных?

Итак, я хотел бы узнать об эффективном способе тестирования контроллера REST на основе Spring, который включает в себя такую ​​среду, как Mockito и т. Д.

Пожалуйста, поделитесь и направьте меня в правильном направлении.

1 Ответ

4 голосов
/ 07 февраля 2012

Обычно контроллеры взаимодействуют только со службами. Большинство взаимодействий между контроллером и службой являются распределением данных и / или состояний. (И обработка исключений.) Насмешка / заглушка (зависание?) сервисный уровень позволяет нам гарантировать, что контроллер обрабатывает все, что может произойти между ним и его сервисами.

«Завершено и гарантировано» зависит от вас. Например, служба, которая взаимодействует с базой данных User, вероятно, будет делать только несколько вещей: извлекать пользователя, извлекать список пользователей, обновлять пользователя или генерировать исключение для приложения или инфраструктуры. С точки зрения контроллера , это те вещи, которые должны быть проверены - это не так уж много, поэтому «полнота» довольно проста.

Ничто из этого не проверяет службы или DAO. Службы, например, могут быть протестированы с использованием «зависания» DAO. DAO могут быть протестированы с базой данных в памяти (хотя, если честно, я не всегда тестирую DAO, если они не имеют нетривиального, сгенерированного разработчиком SQL).

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

...