Почему мой плагин maven-surefire должен находиться в основной сборке проекта?

Обратите внимание, что я доволен maven-surefire-plugin, находящимся в основной сборке проекта, поскольку он дает мне успешные сборки, которые мне нужны.

Но у меня все еще есть вопрос о том, что меня озадачивает...

Я запускаю сборку проекта Maven. Есть два вида тестов. Интеграционные тесты. Эти тесты выполняются на внешней и совершенно пустой базе данных до создания и развертывания военного архива. Таких тестов 12. И приемочные испытания. Эти тесты выполняются для внешней и непустой базы данных с использованием военного архива после его создания и развертывания. Есть 1 такой тест.

Теперь при запуске с командой:

mvn clean install -Denv="test"

Я вижу, что 12 интеграционных тестов пройдены, и сборка прошла успешно.

Но при выполнении команды:

mvn clean install -Denv="acceptance"

Я вижу, что рассмотрено 13 тестов, и сборка завершается сбоем, а журнал консоли показывает:

Tests in error: 
  testUser(it.kahoot.robot.rest.acceptance.UserControllerTest): I/O error on POST request for "http://localhost:8080/kahoot-rest/api/users/login":Connection refused; nested exception is java.net.ConnectException: Connection refused

Tests run: 13, Failures: 0, Errors: 1, Skipped: 0

Результаты теста показывают, что сборка пытается выполнить приемочный тест до создания и развертывания военного архива.

-------------------------------------------------------------------------------
Test set: it.kahoot.robot.rest.acceptance.UserControllerTest
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 20.388 sec <<< FAILURE!
testUser(it.kahoot.robot.rest.acceptance.UserControllerTest)  Time elapsed: 0.407 sec  <<< ERROR!
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://localhost:8080/kahoot-rest/api/users/login":Connection refused; nested exception is java.net.ConnectException: Connection refused

Вот как разделены пакеты: stephane@stephane-ThinkPad-X301:rest> tree

.
├── acceptance
│   ├── AbstractControllerTest.java
│   ├── BaseControllerTest.java
│   └── UserControllerTest.java
├── assertion
│   ├── PartResourceAssert.java
│   ├── UserResourceAssert.java
│   └── UserRoleResourceAssert.java
└── integration
    ├── AbstractControllerTest.java
    ├── BaseControllerTest.java
    ├── UserControllerTest.java
    ├── UserExceptionTest.java
    └── WebSecurityTestConfiguration.java

В моем файле pom.xml есть профиль «test» для интеграционных тестов и профиль «acceptance» для приемочных тестов.

<profile>
  <id>test</id>
  <activation>
    <property>
      <name>env</name>
      <value>test</value>
    </property>
  </activation>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.17</version>
        <configuration>
          <includes>
            <include>**/integration/*.java</include>
          </includes>
          <excludes>
            <exclude>**/acceptance/*.java</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
</profile>
<profile>
  <id>acceptance</id>
  <activation>
    <property>
      <name>env</name>
      <value>acceptance</value>
    </property>
  </activation>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>failsafe-maven-plugin</artifactId>
        <version>2.4.3-alpha-1</version>
        <configuration>
          <includes>
            <include>**/acceptance/*.java</include>
          </includes>
          <excludes>
            <exclude>**/integration/*.java</exclude>
          </excludes>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>integration-test</goal>
              <goal>verify</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>9.3.4.RC0</version>
        <executions>
          <execution>
            <id>start-jetty</id>
            <phase>pre-integration-test</phase>
            <goals>
              <goal>start</goal>
            </goals>
          </execution>
          <execution>
            <id>stop-jetty</id>
            <phase>post-integration-test</phase>
            <goals>
              <goal>stop</goal>
            </goals>
            <configuration>
              <stopKey>stop</stopKey>
              <stopPort>8081</stopPort>
            </configuration>
          </execution>
        </executions>
        <configuration>
          <scanIntervalSeconds>10</scanIntervalSeconds>
          <webApp>
            <contextPath>/kahoot-rest</contextPath>
          </webApp>
          <daemon>true</daemon>
          <connectors>
            <connector
              implementation="org.eclipse.jetty.nio.SelectChannelConnector">
              <port>8080</port>
              <maxIdleTime>300000</maxIdleTime>
            </connector>
          </connectors>
        </configuration>
      </plugin>
    </plugins>
  </build>
</profile>

Интересно вот что: когда я перемещаю maven-surefire-plugin из «тестового» профиля в основную сборку проекта, обе команды заканчиваются успешными сборками. Следующий плагин:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.17</version>
    <configuration>
      <includes>
        <include>**/integration/*.java</include>
      </includes>
      <excludes>
        <exclude>**/acceptance/*.java</exclude>
      </excludes>
    </configuration>
  </plugin>

перемещается из «тестового» профиля и помещается в основную сборку проекта, в результате чего обе команды дают успешные сборки.


person Stephane    schedule 29.09.2015    source источник
comment
Первый вопрос: почему бы не использовать maven-failsafe-plugin отсюда? Вы используете действительно древнюю версию от codehaus... Более того, почему бы не следовать схемам именования maven-surefire-plugin/maven-failsafe-plugin? Кроме того, эти интеграционные тесты... я бы предложил сделать из них отдельный модуль... разделение проблем... также соответствует сборкам maven...   -  person khmarbaise    schedule 29.09.2015
comment
@khmarbaise Спасибо за очень интересный и насыщенный комментарий. Могу я попросить вас рассказать мне больше, где я мог бы следовать какой-либо схеме именования? Не могу найти информацию об этом. Кроме того, вы предлагаете мне поместить интеграционные и приемочные тесты в отдельный проект Maven?   -  person Stephane    schedule 29.09.2015


Ответы (1)


Схемы именования задокументированы на соответствующих страницах плагинов:

Я бы выделил приемочные тесты в отдельный проект и определил выполнение с помощью профиля.

Интеграционные тесты могут выполняться на соответствующем этапе жизненного цикла нравится integration-test

Но, исходя из вашей информации, вы хотели бы запустить пристань для интеграционных тестов, поэтому имеет смысл сделать отдельный модуль и для интеграционных тестов, который можно активировать через профиль.

Другим важным моментом их разделения является наличие отдельного пути к классам для интеграционных и приемочных тестов, что может означать наличие разных зависимостей и может быть какой-то конфигурацией (файлы свойств и т. д.) на основе тестов.

person khmarbaise    schedule 30.09.2015
comment
Еще несколько вопросов :-) Разве мои тесты не выполняются в фазе интеграционного тестирования? Правильно ли я поступаю, называя интеграционные тесты, тесты, запущенные на исполнителе Spring JUnit4, для внешней и пустой базы данных? Обратите внимание, я запускаю сервер Jetty только для приемочных тестов. - person Stephane; 30.09.2015
comment
Интеграционные тесты, как вы их называете, могут быть запущены на этапе интеграционного тестирования, если вы используете maven-failsafe-plugin.... и просто найдите их в src/test/java и назовите их соответствующим образом, например **/*IT.java... - person khmarbaise; 30.09.2015