Почему mvn verify не запускает мои интеграционные тесты?

У меня есть многомодульный проект, и я определил отказоустойчивость в корневом pom следующим образом:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.19</version>
    <configuration>
        <includes>
            <include>**/*IntegrationTest.java</include>
            <include>**/*JourneyTest.java</include>
            <include>**/*CucumberFeatureTest.java</include>
        </includes>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19</version>
    <configuration>
        <excludes>
            <exclude>**/*IntegrationTest.java</exclude>
            <exclude>**/*JourneyTest.java</exclude>
            <exclude>**/*CucumberFeatureTest.java</exclude>
        </excludes>
    </configuration>
</plugin>

Failsafe не определен нигде в других моих помпонах. Если я запускаю mvn verify, он пропускает интеграционные тесты (запускает модульные тесты). Но если я запускаю mvn test-compile failsafe:integration-test, он запускает интеграционные тесты.

Я предполагаю, что отказоустойчивость должна работать в обеих этих ситуациях. Так почему же он не запускается, когда я набираю mvn verify?

ОБНОВЛЕНИЕ: только что заметил, что это было обернуто вокруг этих тегов:

<build>
    <pluginManagement> <!-- oops -->
        <plugins>
            <plugin>

Я чувствую, что это объясняет причину, но я не уверен, почему модульные тесты по-прежнему работают так, как вы ожидаете с mvn verify и mvn test. Почему в этом отношении surefire работает иначе, чем failsafe?


person Daniel Kaplan    schedule 25.11.2015    source источник
comment
Я считаю, что Surefire включен в стандартный POM, а Failsafe — нет.   -  person chrylis -cautiouslyoptimistic-    schedule 26.11.2015


Ответы (2)


Вам нужно связать цель интеграционного теста отказоустойчивости с фазами integration-test и verify maven. По умолчанию отказоустойчивый плагин не включен в проект vanilla maven. Вам нужно добавить его. Таким образом, несмотря на то, что существует жизненный цикл integration-test, по умолчанию он не включен (ну, по крайней мере, не запускает maven-failsafe-plugin). Вы добавляете его в фазы integration-test и verify (ему нужны обе, он завершит сборку только на фазе verify [если предыдущие интеграционные тесты не пройдены], так что на фазе жизненного цикла post-integration все еще есть шанс запустить и очистить ресурсы, отсюда и название «отказоустойчивый»).

   <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-failsafe-plugin</artifactId>
       <version>2.19</version>
       <configuration>
           <includes>
               <include>**/*IntegrationTest.java</include>
               <include>**/*JourneyTest.java</include>
               <include>**/*CucumberFeatureTest.java</include>
           </includes>
       </configuration>
       <executions>
          <execution>
            <goals>
              <goal>integration-test</goal>
              <goal>verify</goal>
            </goals>
          </execution>
        </executions>
   </plugin>
person JJF    schedule 25.11.2015
comment
Это изменение никак не повлияло на результат. Я обновлю исходный вопрос, чтобы включить это - person Daniel Kaplan; 25.11.2015
comment
Да, привязка отказоустойчивого плагина к исполнению — правильное решение. К сожалению, как и во многих документах Maven, это недостаточно хорошо указано. Эта настройка описана в официальной документации подключаемого модуля Failsafe. - person rdguam; 16.04.2016
comment
Для подписчиков см. обновление Даниэля Каплана на вопрос, почему это не повлияло на его результат (но, тем не менее, это правильный ответ). - person rogerdpack; 15.05.2018

Я столкнулся с аналогичной проблемой при запуске mvn verify, поскольку интеграционные тесты не выполнялись, а выполнялись только модульные тесты. Это сработало после отметки skipTests в false:

<plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>2.19.1</version>
                    <configuration>
                        <skipTests>false</skipTests>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>integration-test</goal>
                                <goal>verify</goal>
                            </goals>
                        </execution>
                    </executions>           
</plugin>
person Cristi B.    schedule 06.03.2019