Maven отказоустойчиво не выполняет тесты
Я прочесал StackOverflow и многие другие сайты, нашел много других связанных постов и следовал всем упомянутым предложениям, но в конце концов отказоустойчивая пропускает мои тесты.
Мой тест JUnit находится здесь: myModule/src/main/test/java/ClientAccessIT.java
Я пропускаю верный огонь, потому что в этом модуле нет модульных тестов:
<!-- POM snippet -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
И я пытаюсь запустить интеграционные тесты с отказоустойчивым:
<!-- POM snippet -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<id>run-tests</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
Однако когда я запускаю mvn verify
я вижу это:
[INFO] --- maven-failsafe-plugin:2.14.1:integration-test (run-tests) @ rest-services-test ---
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
Я провел последние 4 1/2 часа в чистке, любая помощь будет оценена. Единственное, о чем стоит упомянуть, это то, что у меня есть Cargo, устанавливающий и разрушающий контейнер Tomcat. Кто-нибудь видит явную проблему?
Ответы
Ответ 1
Вам нужно переименовать свой тестовый класс.
Вы можете найти имена, которые плагин ищет по умолчанию в документации, как указано @acdcjunior:
По умолчанию Failsafe Plugin будет автоматически включать все тестовые классы со следующими шаблонами подстановок:
- "
**/IT*.java
" - включает все его подкаталоги и все имена файлов java, начинающиеся с "IT". - "
**/*IT.java
" - включает все его подкаталоги и все имена файлов java, заканчивающиеся на "IT". - "
**/*ITCase.java
" - включает все его подкаталоги и все имена файлов java, которые заканчиваются на "ITCase".
Ответ 2
У меня была аналогичная проблема. Если нет тестовых классов, скомпилированных для целевых/тестовых классов, тогда проверьте свой файл pom и убедитесь, что упаковка не является "pom".
Ответ 3
Для многомодульных проектов дочерний проект должен иметь объявленный плагин,
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
</plugin>
версия наследуется от родительского pom. Без указанного выше, плагин только в родительском pom не будет работать.
Ответ 4
Ваши тесты не находятся в каталоге исходных текстов тестов по умолчанию src/test/java. Увидеть:
https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
MyModule/SRC/Основной/тест/Java/ClientAccessIT.java
должно быть:
MyModule/SRC/тест/Java/ClientAccessIT.java
Вы также можете обновить свой pom файл (если вы действительно хотите, чтобы тесты жили в main), включив в него:
<build>
<testSources>
<testSource>
<directory>src/main/test</directory>
</testSource>
</testSources>
</build>
Ответ 5
У меня также была аналогичная проблема, но для того, чтобы упаковочный элемент был "pom", нужен был. Убедитесь, что ваши тестовые исходные файлы скомпилированы и добавлены в папку... /target/test -classes с помощью модуля maven-compiler:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.version}</version>
<executions>
<execution>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
Ответ 6
У меня возникла та же проблема, и я попробовал несколько предложенных здесь вариантов. Я занимаюсь разработкой приложения Spring Boot с использованием JUnit 5. К сожалению, ни один из моих интеграционных тестов (расположенных в src/test/java
и с суффиксом *TestIT.java
) не был поднят, независимо от того, что плагин сделал для этого. Я попытался понизиться до 2.18.1, 2.19.1 и попытался удалить разделы <configuration>
executetions <executions>
и <configuration>
чтобы попытаться использовать даже функциональные возможности плагина по умолчанию, но безуспешно.
Наконец-то я сменил версию на последнюю (на момент написания) на 2.22.0 и альт. Вот конфигурация, которую я добавил в раздел <build><plugins>
моего pom. И что еще лучше, мне не нужно добавлять исполнения, которые определяют integration-test
и verify
цели, которые вы видите у большинства людей; failsafe выполняет их по умолчанию. Я также включил конфигурацию моего надёжного плагина, так как я использую его для выполнения модульных тестов во время фазы test
жизненного цикла maven.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version><!--$NO-MVN-MAN-VER$-->
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.0</version><!--$NO-MVN-MAN-VER$ -->
</plugin>
И просто для правильной меры, чтобы сказать безошибочный и отказоустойчивый для использования JUnit 5, я включаю это в мой раздел <dependencies>
:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
Eclipse отображает предупреждение (желтая волнистая линия подчеркивания) под тегом версии, отсюда и включение ошибки <!--$NO-MVN-MAN-VER$ -->
. Я уверен, что есть лучший способ справиться с этим, но это работает для меня в этом случае.
Чтобы ускорить тестирование этой конфигурации и избежать необходимости проходить все более ранние этапы жизненного цикла перед этапами test
, integration-test
или verify
, я использовал следующие команды для быстрой проверки:
-
mvn failsafe:integration-test
(запускает только интеграционные тесты) -
mvn surefire:test
(запускает только юнит-тесты) - (Я, очевидно, запускаю весь жизненный цикл, когда он считается)
Надеюсь, это кому-нибудь поможет. Ура!
Ответ 7
У меня была несколько похожая проблема. Мои интеграционные тесты не собирались. Мой проект - многомодульный проект с весенней загрузкой. И моя ошибка была в том, что я добавил maven-failsafe-plugin в родительский POM. После работы со многими опциями я поместил failsafe-плагин в модуль pom, где присутствовали все мои интеграционные тесты, которые решили мою проблему.
Ответ 8
Такая проблема может возникнуть при использовании отказоустойчивой плагиной 3.x. x+ с JUnit5 и по ошибке аннотировать тестовый класс с @Test
аннотацией из JUnit4.
Используйте org.junit.jupiter.api.Test
(JUnit5) вместо org.junit.Test
(Junit4)
ПРИМЕЧАНИЕ: это может быть трудно заметить, так как IDE может запускать эту проблему без проблем, как тест JUnit4.
Ответ 9
Для меня это был раздел отсутствующих казней
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
Отказоустойчивый с документацией TestNG на https://maven.apache.org/surefire/maven-failsafe-plugin/examples/testng.html показал pom без него, и он не работал.
<plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
[...]
</plugins>
Добавление раздела о пропущенных казнях, показанного выше, решило проблему.