Как запускать тесты из родительского модуля mvn?

У меня есть следующая структура в mvn.

| pom.xml (parent)
|
|
+----- module A (common classes)
|      |   pom.xml
|      |
|      \---src
|          +---main
|          |
|          \---test
|              +---junit
|              |
|              \---integration
|
+----- module B (web app)
|      |   pom.xml
|      |
|      \---src
|          +---main
|
+----- module C (web app)
|      |   pom.xml 
|      |
|      \---src
|          +---main

Модуль A — это модуль, наследуемый всеми последующими модулями (B, C, ...). Этот модуль имеет общую функциональность и тестовые примеры junit/интеграции. Это не веб-приложение.

Модуль B — это веб-приложение. Он зависит от модуля B.

Модуль C — это веб-приложение. Он зависит от модуля B.

Наш код rest/api из Джерси находится в модуле A. Таким образом, независимо от того, какой модуль мы развернем, у нас всегда будет доступ к rest/api.

До сих пор мне удалось настроить плагин Maven FailSafe в модуле C для запуска экземпляра tomcat, когда я запускаю верхний (родительский) pom.xml (то есть: проверка mvn).

Однако модуль C не может видеть интеграционные тесты из модуля A. Я попытался настроить maven-jar-plugin (http://maven.apache.org/guides/mini/guide-attached-tests.html).

В pom.xml модуля A у меня есть:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.0.2</version>
    <executions>
      <execution>
        <goals>
          <goal>test-jar</goal>
        </goals>
        <configuration>
          <includes>
            <include>**/*IT.java</include>
          </includes>
        </configuration>
      </execution>
    </executions>
  </plugin>

и в модуле C у меня есть:

    <dependency>
        <groupId>groupId</groupId>
        <artifactId>SCCommon</artifactId>
        <type>test-jar</type>
        <classifier>tests</classifier>
        <version>9.1.0-SNAPSHOT</version>
        <scope>test</scope>
   </dependency>

Может ли кто-нибудь помочь мне понять, как я могу запустить эти интеграционные тесты в Модуле A, когда mvn запускает отказоустойчивый плагин Module C.

Примечание: интеграционные тесты называются *IT.java, поэтому они подхватываются отказоустойчивым подключаемым модулем.

Есть ли другой способ сделать это или я даже использую правильный плагин?

Заранее большое спасибо.


person allegjdm93    schedule 18.04.2017    source источник
comment
Если вам нужно сделать <include>**/*IT.java</include>, это показатель наличия отдельного модуля интеграционных тестов, в который вы должны поместить свои интеграционные тесты.   -  person khmarbaise    schedule 18.04.2017


Ответы (1)


Если модуль C содержит зависимость от A с классификатором tests, вы можете сослаться на эту зависимость в атрибуте <dependenciesToScan> конфигурации вашего maven-failsafe-plugin (начиная с версии 2.15).

http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html#dependenciesToScan

<dependency>
    <groupId>com.group</groupId>
    <artifactId>A</artifactId>
    <version>1.0-SNAPSHOT</version>
    <classifier>tests</classifier>
</dependency>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.15</version>
    <executions>
        <execution>
            <id>it</id>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <dependenciesToScan>
            <dependency>com.group:A</dependency>
        </dependenciesToScan>
    </configuration>
</plugin>

Используя вашу конфигурацию maven-jar-plugin, я получил пустой архив тестов. Мне пришлось изменить шаблон на <include>**/*IT.class</include>.

person Luciano van der Veekens    schedule 18.04.2017
comment
Большое спасибо, я добавил в конфигурацию тестовый классификатор и тег dependenciesToScan. Теперь все это находится в модуле C pom. Я также изменил расширение с .java на .class для работы плагина maven-jar. Проверил, архив не пустой. Теперь, когда я запускаю mvn verify, я получаю -> Не удалось выполнить цель в модуле проекта C: не удалось разрешить зависимости для проекта com.xxx.connect:ModuleC:war:9.1.0-SNAPSHOT: не удалось найти артефакт com.xxx.pathways .common:ModuleA:jar:tests:9.1.0-SNAPSHOT. Однако, когда я перехожу к модулю A, под целью я вижу файл ModuleA-9.1.0-SNAPSHOT-tests.jar. - person allegjdm93; 19.04.2017
comment
@allegjdm93 allegjdm93 Вы выполнили mvn install перед запуском mvn verify, чтобы установить модуль A в локальный репозиторий mvn, чтобы другие проекты могли использовать эту зависимость? Или, возможно, где-то в файле POM есть опечатка. - person Luciano van der Veekens; 19.04.2017