What is the difference between the Maven Surefire and Maven Failsafe plugins?
Solution 1:
In simple words, the Failsafe plugin is designed to run integration tests while Surefire to run unit tests.
This is further explained in Maven FAQ:
maven-surefire-plugin
is designed for running unit tests and if any of the tests fail then it will fail the build immediately.
maven-failsafe-plugin
is designed for running integration tests, and decouples failing the build if there are test failures from actually running the tests.The name "failsafe" was chosen both because it is a synonym of surefire and because it implies that when it fails, it does so in a safe way.
The Failsafe Plugin has two goals:
failsafe:integration-test
runs the integration tests of an application,failsafe:verify
verifies that the integration tests of an application passed.
See also:
- Benefits of Maven FailSafe Plugin at SO
Solution 2:
From https://maven.apache.org/surefire/maven-failsafe-plugin/, I would say that the difference between Surefire and Failsafe is the way they fail:
If you use the Surefire Plugin for running tests, then when you have a test failure, the build will stop at the integration-test phase and your integration test environment will not have been torn down correctly.
The Failsafe Plugin is used during the integration-test and verify phases of the build lifecycle to execute the integration tests of an application. The Failsafe Plugin will not fail the build during the integration-test phase, thus enabling the post-integration-test phase to execute.
Solution 3:
In my country its the second google result when searching for "maven failsafe maven surefire" to get to this FAQ: Difference between maven-failsafe-plugin and maven-surefire-plugin which states:
maven-surefire-plugin is designed for running unit tests and if any of the tests fail then it will fail the build immediately.
maven-failsafe-plugin is designed for running integration tests, and decouples failing the build if there are test failures from actually running the tests."