2015-08-26 3 views
8

Spring есть 2 настройки для MockMvc:Являются ли Spring MockMvc для тестирования модулей или интеграции?

  1. Standalone установки
  2. установка WebApplicationContext

В общем, какого рода тестирования MockMvc используется? Единица или интеграция? или оба?

Как я могу сказать, что использование автономной настройки (работающей вне контекста приложения Spring) позволяет писать модульные тесты, а с помощью установки WebApplicationContext вы можете писать тесты интеграции?

ответ

24

Обе формы на самом деле интеграционные тесты, так как вы тестируете интеграцию своего кода с весной DispatcherServlet и поддерживаете инфраструктуру. Разница заключается в количестве поддерживающей инфраструктуры, которая используется за кулисами.

Данные приведены в справочнике по весне.

Интересные отрывки:

"webAppContextSetup" загружает фактическую конфигурацию Spring MVC , что приводит к более полному интеграционного теста. Поскольку структура TestContext кэширует загруженную конфигурацию Spring, она помогает поддерживать тесты быстро, даже когда добавляется больше тестов. Кроме того, вы можете вводить макеты услуг в контроллеры через конфигурацию Spring, в , чтобы оставаться сосредоточенным на тестировании веб-слоя.

...

"standaloneSetup" с другой стороны, это немного ближе к единице теста. Он проверяет один контроллер за раз, контроллер может быть , инъецированный макетными зависимостями вручную, и он не включает в себя Загрузка конфигурации Spring. Такие тесты более сфокусированы по стилю, и упрощают просмотр того, какой контроллер тестируется, независимо от того, требуется ли какая-либо конфигурация Spring MVC для конкретной конфигурации и т. Д. «standaloneSetup» также очень удобен для написания специальных тестов , чтобы проверить поведение или отладить проблему.

...

Так же, как с интеграцией против модульного тестирования, нет правильного или неправильного ответа . Использование «standaloneSetup» подразумевает необходимость дополнительных дополнительных тестов «webAppContextSetup» для проверки конфигурации Spring MVC . В качестве альтернативы вы можете написать все тесты с помощью «webAppContextSetup» и всегда тестировать фактическую конфигурацию Spring MVC .

...

Варианты, представленные в Spring MVC Теста различные остановки по шкале от классического блока до полной интеграции тестов. Разумеется, ни один из в Spring Spring MVC Test не является классическим модульным тестом, а ближе к нему подходит . Например, вы можете изолировать сервисный уровень с помощью mocks, инъецированных в контроллеры, а затем вы тестируете слой только через DispatcherServlet и с фактической конфигурацией Spring , так же, как вы можете протестировать уровень базы данных в изоляции слоев выше , Или вы можете использовать автономную настройку , фокусируясь на одном контроллере за раз, и вручную предоставляя конфигурацию , необходимую для ее работы.

Если у вас есть сомнения, я предлагаю сначала прочитать справочное руководство, прежде чем отправлять вопросы здесь. ;)

С уважением,

Сэм (автор Spring Framework TestContext)

0

Я бы сказал, что оба метода предназначены для тестирования интеграции, но автономно вы должны указать, какой контроллер вы тестируете.

Настройка WebApplicationContext загружает весь контекст, поэтому вам все равно, где конкретный контроллер, который служит, например, /people POST-запросы.

Поэтому я бы рекомендовал использовать настройку WebApplicationContext для тестирования вашего REST API с точки зрения интерфейса, с которым приложение должно работать. Вы не сравниваете тест с фактическим кодом, тогда + вы документируете, как должно себя вести приложение.

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