Обмен тестовым кодом в Maven
Как вы можете зависеть от тестового кода от другого модуля в Maven?
Пример: у меня есть 2 модуля:
Мне нужен тестовый пример в Main для расширения базового тестового класса в Base. Возможно ли это?
Обновление: найден приемлемый ответ, который включает создание тестовой банки.
Ответы
Ответ 1
Я рекомендую использовать тип вместо классификатора (см. также: classifier). Он говорит Maven более явно, что вы делаете (и я обнаружил, что m2eclipse и q4e оба лучше).
<dependency>
<groupId>com.myco.app</groupId>
<artifactId>foo</artifactId>
<version>1.0-SNAPSHOT</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
Ответ 2
Спасибо за предложение базового модуля. Однако я бы предпочел не создавать новый модуль для этой цели.
Нашел приемлемый ответ в документации Surefire Maven и в блоге. См. Также "Как создать банку, содержащую тестовые классы.
Это создает jar файл с кодом src/test/java
с помощью jar plugin, чтобы модули с тестами могли совместно использовать код.
<project>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Чтобы использовать прикрепленный тестовый JAR, который был создан выше, вы просто указываете зависимость от основного артефакта с указанным классификатором тестов:
<project>
...
<dependencies>
<dependency>
<groupId>com.myco.app</groupId>
<artifactId>foo</artifactId>
<version>1.0-SNAPSHOT</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
</dependencies>
...
</project>
Ответ 3
Мы решили это, выполнив проект maven с тестовым кодом как src/main/java и добавив следующую зависимость к проектам:
<dependency>
<groupId>foo</groupId>
<artifactId>test-base</artifactId>
<version>1</version>
<scope>test</scope>
</dependency>
Ответ 4
Да... просто включите базовый модуль в качестве зависимости в Main. Если вы только наследуете тестовый код, вы можете использовать тег области видимости, чтобы убедиться, что Maven не включает код в ваш артефакт при развертывании. Что-то вроде этого должно работать:
<dependency>
<groupId>BaseGroup</groupId>
<artifactId>Base</artifactId>
<version>0.1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>