Общий доступ к src/test классам в multi-module Maven
Быстрый ответ
Стоит сказать проще: создайте test-jar, используя надежный maven-jar-plugin
для пакетирования тестовых классов src/test
, а затем добавьте этот артефакт как зависимость с областью использования test в модуле, которому нужны эти классы:
pom.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
модуля, требующего эти классы:
<dependency>
<groupId>your.group.id</groupId>
<artifactId>module-that-provides</artifactId>
<version>your.version</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
И все, вы освоили переиспользование тестовых классов! 🎉
Оптимизация порядка сборки
В идеальной ситуации проекты, использующие общие тестовые артефакты, должны строиться в оптимальном порядке. Если вы качественно зададите в родительском POM-файле порядок модулей, то Maven будет на вашей стороне. В противном случае можно столкнуться с ошибками отсутствующих test-jar.
Обход циклических зависимостей
Будьте бдительны в отношении циклических зависимостей при реиспользовании тестового кода. Они могут сбить порядок сборки и расплывчато определить границы между модулями. Разделите тестовые артефакты и поддерживайте чистоту структуры модулей, чтобы продукт оставался удобным для поддержки.
Одобряем разделение на тестовое и рабочее пространства
Помните о разделении src/main
и src/test
. Создание test-jar сохраняет указанное разделение между тестовыми и основными классами. Таким образом, вы всегда получите чистые и стабильные product-артефакты.
Визуализация
Вообразите многомодульный Maven-проект как семейство папок, каждая из которых ведет свою жизнь и имеет свой набор тестов, но может заимствовать их у других.
Семья папок: [Папка A, Папка B, Папка C]
Тесты Папки A: [Тест 1, Тест 2]
Тесты Папки B: [Тест 3, Тест 4]
У Папки C подход на время заимствуют у A и B.
Таким образом, Maven предоставляет уникальную стратегию для общего использования тестов. Это вроде бы универсального пульта управления для управления тестовыми классами в разных папках:
Папка C: [Тесты Папки A, Тесты Папки B]
# Теперь У Папки C арсенал тестов как у A, так и у B
Ключевая мысль: создайте общий тестовый модуль, который станет вашей секретной приправой для обмена тестами, как библиотечная полка с ресурсами, доступной всему проекту.
Использование test-jar при многомодульных сборках
Применяйте этот подход в сложных сценариях многомодульных сборок, чтобы оттенить свои тестовые зависимости, отделяя их от зависимостей между модулями.
За весомыми словами о повторном использовании тестовых конструкций
Акцентируйте своё внимание на повторном использовании тестов и внедрении практик общего тестирования, чтобы они стали взаимопонятной частью процесса разработки, сравнимо с product-кодом.
Создание тестовых стандартов для сложных ситуаций
Если тесты из одного модуля стали образцом для других модулей, то именно тогда вам пригодится подход с test-jar. Это поддержит природное развитие стандартных практик и способствует внедрению хороших обычаев в команде.
Полезные материалы
- Maven – Введение в жизненный цикл сборки — Углубите свои знания о жизненном цикле сборки Maven.
- Maven – Руководство по работе с множеством модулей — Познакомьтесь с подходами к управлению в многомодульных проектах.
- Maven Surefire Plugin – Включение и исключение тестов — Узнайте, как контролировать выполнение тестов в Maven.
- Руководство пользователя JUnit 5 — Ваш гид по JUnit 5.
- Поиск в Maven Central Repository — Поиск необходимых артефактов, версий и документации.
- java – Как создать новый тип упаковки для Maven? – Stack Overflow — Дискуссия о создании новых типов упаковки в Maven и стратегий тестирования.