Maven отказоустойчиво не выполняет тесты - программирование
Подтвердить что ты не робот

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. Кто-нибудь видит явную проблему?

4b9b3361

Ответ 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>

Добавление раздела о пропущенных казнях, показанного выше, решило проблему.