Общий доступ к src/test классам в multi-module Maven

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Стоит сказать проще: создайте test-jar, используя надежный maven-jar-plugin для пакетирования тестовых классов src/test, а затем добавьте этот артефакт как зависимость с областью использования test в модуле, которому нужны эти классы:

pom.xml модуля, предоставляющего эти классы:

xml
Скопировать код
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <executions>
    <execution>
      <goals><goal>test-jar</goal></goals>
    </execution>
  </executions>
</plugin>

pom.xml модуля, требующего эти классы:

xml
Скопировать код
<dependency>
  <groupId>your.group.id</groupId>
  <artifactId>module-that-provides</artifactId>
  <version>your.version</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

И все, вы освоили переиспользование тестовых классов! 🎉

Кинга Идем в IT: пошаговый план для смены профессии

Оптимизация порядка сборки

В идеальной ситуации проекты, использующие общие тестовые артефакты, должны строиться в оптимальном порядке. Если вы качественно зададите в родительском POM-файле порядок модулей, то Maven будет на вашей стороне. В противном случае можно столкнуться с ошибками отсутствующих test-jar.

Обход циклических зависимостей

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

Одобряем разделение на тестовое и рабочее пространства

Помните о разделении src/main и src/test. Создание test-jar сохраняет указанное разделение между тестовыми и основными классами. Таким образом, вы всегда получите чистые и стабильные product-артефакты.

Визуализация

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

Markdown
Скопировать код
Семья папок: [Папка A, Папка B, Папка C]

Тесты Папки A: [Тест 1, Тест 2]
Тесты Папки B: [Тест 3, Тест 4]
У Папки C подход на время заимствуют у A и B.

Таким образом, Maven предоставляет уникальную стратегию для общего использования тестов. Это вроде бы универсального пульта управления для управления тестовыми классами в разных папках:

Markdown
Скопировать код
Папка C: [Тесты Папки A, Тесты Папки B]
# Теперь У Папки C арсенал тестов как у A, так и у B

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

Использование test-jar при многомодульных сборках

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

За весомыми словами о повторном использовании тестовых конструкций

Акцентируйте своё внимание на повторном использовании тестов и внедрении практик общего тестирования, чтобы они стали взаимопонятной частью процесса разработки, сравнимо с product-кодом.

Создание тестовых стандартов для сложных ситуаций

Если тесты из одного модуля стали образцом для других модулей, то именно тогда вам пригодится подход с test-jar. Это поддержит природное развитие стандартных практик и способствует внедрению хороших обычаев в команде.

Полезные материалы

  1. Maven – Введение в жизненный цикл сборки — Углубите свои знания о жизненном цикле сборки Maven.
  2. Maven – Руководство по работе с множеством модулей — Познакомьтесь с подходами к управлению в многомодульных проектах.
  3. Maven Surefire Plugin – Включение и исключение тестов — Узнайте, как контролировать выполнение тестов в Maven.
  4. Руководство пользователя JUnit 5 — Ваш гид по JUnit 5.
  5. Поиск в Maven Central Repository — Поиск необходимых артефактов, версий и документации.
  6. java – Как создать новый тип упаковки для Maven? – Stack Overflow — Дискуссия о создании новых типов упаковки в Maven и стратегий тестирования.