В чем разница между плагинами Maven Surefire и Maven Failsafe?

Ответы:

141

Проще говоря, плагин Failsafe предназначен для выполнения интеграционных тестов, а Surefire - для выполнения модульных тестов .

Это дополнительно объясняется в FAQ по Maven :

  • maven-surefire-pluginпредназначен для запуска модульных тестов, и если какой-либо из тестов завершится неудачно, он немедленно завершит сборку.

  • maven-failsafe-pluginпредназначен для выполнения интеграционных тестов и отделяет сбой сборки при наличии сбоев теста от фактического запуска тестов.

    Название « отказоустойчивый » было выбрано как потому, что оно является синонимом « безотказности », так и потому, что оно подразумевает, что когда он терпит неудачу, он делает это безопасным способом.

    Отказоустойчивыми Плагин имеет две цели:

    • failsafe:integration-test выполняет интеграционные тесты приложения,
    • failsafe:verify проверяет, прошли ли интеграционные тесты приложения.

Смотрите также:

kenorb
источник
4
Интересный вопрос, почему . Многие инструменты сборки работают идеально, не делая этого, возможно, довольно искусственного и ограниченного различия. Конфигурирование обоих плагинов вместе и последовательное поглощение их отчетов - это настоящая PITA.
Рафаэль
И нет, различия, указанные в других ответах, не дают достаточных оснований для наличия нескольких инструментов для того, что должно быть фильтрами и флагами.
Рафаэль
27

Из https://maven.apache.org/surefire/maven-failsafe-plugin/ я бы сказал, что разница между Surefire и Failsafe заключается в том, как они терпят неудачу:

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

Плагин Failsafe используется на этапах интеграционного тестирования и проверки жизненного цикла сборки для выполнения интеграционных тестов приложения. Плагин Failsafe не приведет к сбою сборки на этапе тестирования интеграции, тем самым позволяя выполнить этап тестирования после интеграции.

Йонас Вольф
источник
2
Тогда возникает вопрос: зачем вообще использовать Surefire, если нам говорят, что он может оставить вещи в неправильном состоянии?
user118967
6

В моей стране это второй результат в Google при поиске «maven failsafe maven surefire», чтобы перейти к этому FAQ: разница между maven-failsafe-plugin и maven-surefire-plugin, в которой говорится:

maven-surefire-plugin предназначен для запуска модульных тестов, и если какой-либо из тестов завершится неудачно, он немедленно завершит сборку.

maven-failsafe-plugin предназначен для выполнения интеграционных тестов и отделяет неудачную сборку, если есть сбои теста, от фактического выполнения тестов ".

JBA
источник