В Maven есть два типа плагинов для запуска тестов: Surefire и Failsafe, и оба они служат разным целям. (Я упомянул Surefire здесь, потому что мне кажется, что это помогает объяснить и сопоставить различные типы сбоев в сборках.)
Надежный
Surefire — это подключаемый модуль, разработанный для ваших тестов перед развертыванием, таких как модульные и компонентные тесты. Surefire гарантированно вернет ошибку (и, следовательно, сломает вашу сборку), если какой-либо из тестов не пройден. Вам нужно такое поведение в тестах перед развертыванием, потому что вы хотите завершить сборку раньше, если ваши тесты не пройдут, а поскольку модульные и компонентные тесты не имеют (или не должны) каких-либо внешних зависимостей, это безопасно провалить сборку тут же.
Отказоустойчивость
Failsafe — это подключаемый модуль, предназначенный для тестов после развертывания, таких как функциональные и дымовые тесты. Failsafe, как следует из названия, обрабатывает сбои безопасно, всегда возвращая успешный код выхода (как вы испытали в своей сборке). Причина этого заключается в том, что для тестов после развертывания вы не хотите, чтобы сбои тестов немедленно нарушали сборку, потому что вы, возможно, развернули инфраструктуру или загрузили некоторые тестовые данные в система, которая нуждается в очистке перед сбоем сборки. Поэтому Failsafe разделяет проверку отказов на цель failsafe:verify
, которая происходит на этапе verify
.
Если вы запустите Maven без параметров (при нормальном жизненном цикле jar
), вы заметите фазу между integration-test
и verify
, называемую post-integration-test
. Это этап, который был разработан для удаления любой инфраструктуры или тестовых данных, которые вы могли ввести в систему для запуска тестов.
... pre-integration-test, integration-test, post-integration-test, verify, ...
Фаза до integration-test
, pre-integration-test
предназначена для указанного посева и создания инфраструктуры.
Подводя итог, с помощью тестов перед развертыванием вы хотите как можно раньше завершить сборку, и поэтому surefire
гарантирует это, выходя с ошибкой.
Принимая во внимание, что в тестах после развертывания часто есть внешние зависимости, которые необходимо очистить, прежде чем вы завершите сборку. Например, в Kubernetes вы можете захотеть выполнить откат развертывания, поэтому failsafe:integration
всегда возвращает успешную сборку, чтобы гарантировать, что вы сможете выполнить очистку перед сбоем сборки, проверив статус с помощью failsafe:verify
.
(Принятый в настоящее время ответ просто цитирует руководство и не объясняет, почему есть две команды и есть различия, поэтому я считаю, что этот ответ необходим.)
person
Elven Spellmaker
schedule
08.08.2020