Maven: pom.xml, scope, Surefire і Failsafe, запуск тестів
Maven збирає проєкт за описом у pom.xml: координати (groupId, artifactId, version), залежності, плагіни, властивості. Стандартна структура: src/main/java, src/test/java, src/test/resources. Для проєкту лише з тестами код лежить у src/test.
- Залежність зі
<scope>test</scope>доступна лише при компіляції й запуску тестів і не потрапляє в артефакт. Тестові бібліотеки (JUnit, AssertJ, REST Assured) мають такий scope. - Версії виносять у
<properties>або BOM (dependencyManagement), щоб не розходились.mvn dependency:treeпоказує, звідки прийшла конфліктна версія. - Життєвий цикл:
validate → compile → test → package → verify; команда виконує всі фази до вказаної. Томуmvn verifyзапускає й тести Failsafe.
Surefire запускає unit-тести у фазі test (за замовчуванням класи *Test, Test*, *Tests, *TestCase). Failsafe призначений для інтеграційних тестів (*IT, IT*, *ITCase); його цілі integration-test і verify. Збій не зупиняє збірку одразу, тож фаза post-integration-test (зупинка тестового середовища) таки виконається, а результат перевіряє verify. Запускайте mvn verify, а не mvn integration-test. У проєктах автоматизації UI/API часто використовують лише Surefire, а Failsafe — коли тести йдуть після підняття сервісів.
Корисні запуски:
mvn test -Dtest=LoginTest # один клас
mvn test -Dtest=LoginTest#validLogin # один метод
mvn test -Dgroups=smoke # теги JUnit 5/6 / групи TestNG
mvn test -DexcludedGroups=slow
mvn verify -Pstaging -Dbrowser=firefox # профіль і системна властивість
mvn -DskipTests package # компілює тести, але не запускає
mvn -Dmaven.test.skip=true package # навіть не компілює тести
Профіль (<profile>) змінює залежності, властивості чи конфігурацію плагіна для оточення. Користувацькі властивості з -D Surefire передає у процес тестів, тож у коді вони доступні через System.getProperty("browser", "chrome").