Совместное использование src / тестовых классов между модулями в многомодульном проекте maven



у меня есть многомодульный проект Maven. Для этого примера рассмотрим два модуля:




  • data

  • consumer


модуль consumer модуль data как зависимость.



модуль data объявляет кучу основных классов. Есть тесты под src/test, которые их используют. Эти тесты требуют некоторого длинного создания объекта, поэтому у меня есть класс с некоторыми полезными методами в нем для создания этих объектов. Это служебный класс (SampleDataHelper) в src/test иерархии.



у меня также есть некоторые тесты в consumer модуль, который должен создать некоторые из этих длинных объектов. Я хочу использовать SampleDataHelper класса (определена в data src/test) в тестах, которые находятся в моем consumer src/test дерево. К сожалению, даже если data зависимость consumer,consumer Не вижу классов, которые существуют под data src/test.



чтобы бороться с этим, я думал, что могу создать другое модуль (data-test), и переместить SampleDataHelper к нему в src/main. Тогда я бы включил data-test как объем испытания зависимость data. К сожалению, это вводит циклическую зависимость:data использует data-test, а data-test требует data.



единственное решение, которое я придумал, это разместить SampleDataHelper под data src/main под a test пакет и надеюсь, что никакой реальный код приложения никогда не вызывает его.



как я могу поделиться своим SampleDataHelper класс между модулями без поставив его под src/main?

668   2  

2 ответов:

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

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.2</version>
  <executions>
    <execution>
      <goals>
        <goal>test-jar</goal>
      </goals>
    </execution>
  </executions>
</plugin>

ваш потребительский проект будет зависеть как от обычного артефакта JAR данных, так и от дополнительного test-jar артефакт, с областью тестирования конечно:

<dependency>
  <groupId>com.foo</groupId>
  <artifactId>data</artifactId>
  <version>1.0</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

я использовал этот подход во многих случаях и он работает хорошо.

так что проблема в том, что (некоторые) тесты в data модуль зависит от SampleDataHelper класса? Вы можете переместить SampleDataHelper класс src/main на data-test модуль, если вы одновременно двигать тесты (которые зависят от конкретного класса)src/test на data-test модуль. Следовательно, больше не будет циклических зависимостей.

Comments

    Ничего не найдено.