Тесты SpringBoot с MockMVC больше подходят для безошибочного (mvn test) или отказоустойчивого (mvn verify)? - PullRequest
0 голосов
/ 24 ноября 2018

Я оцениваю преимущества и недостатки использования каждого подхода.

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

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

Кроме того, установка тестов этого контроллера делает мой конвейер длиннее и медленнее, так как он будет прерван после ненужного пакета и т. п.

Что вы делаетеправильная схема для оптимизации этих инструментов в процессе сборки?

Одна из идей, которые у меня есть, - попытаться использовать его в виде двух профилей: -Профиль тестирования будет выполнять все ИТ-тесты с поддельными внешними зависимостями на этапе тестирования - Интеграция профилей будет выполнять все ИТ-тесты с реальной конфигурацией продукта при проверке.Но тесты были бы такими же.

1 Ответ

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

Исходя из моего личного опыта, мы столкнулись с той же дилеммой.В итоге мы использовали оба типа тестов: - модульные тесты, управляемые плагином surefire - интеграционные тесты, управляемые плагином failsafe.Оба работали во время сборки (но на разных этапах)

Теперь, что касается тестов контроллера:

Я считаю, что юнит-тесты должны быть быстрыми, десятки или сотни из них должны выполняться в пределахПримерно за 1 секунду они также не должны иметь внешних зависимостей и запускать все в памяти (без сокетов, сетевых подключений, баз данных и т. Д.). Эти тесты должны выполняться программистом в любое время во время разработки, возможно, 5 раз в минуту,просто чтобы убедиться, что небольшой рефакторинг не сломает что-то, например.

С другой стороны, тесты контроллера запускают всю пружину, что по определению не так быстро.Что касается внешних зависимостей, в зависимости от конфигурации фиктивного MVC вы можете даже запустить какой-то внутренний сервер для обслуживания запросов, так что это (IMO) не является модульным тестом.Вот почему мы решили запустить те, у которых есть отказоустойчивый плагин, и проводить интеграционные тесты.

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

...