Мой родительский pom содержит конфигурации maven-surefire-plugin
и maven-failsafe-plugin
, определяющие параметры <groups>
и <excludedGroups>
, как показано ниже, с использованием моего интерфейса com.adam.testutil.IntegrationTest
для аннотации JUnit 4 @Category
, чтобы пометить любой тест как интеграционный.
Все модули в родительском pom (не только с интеграционными тестами) потребуют com.adam.testutil.IntegrationTest
в своем пути к классам, чтобы запускались надёжные и отказоустойчивые плагины, в противном случае они выдают ошибку ClassNotFoundException
.
Таким образом, класс должен находиться в модуле, который все модули должны объявлять как зависимость. Я бы предпочел объявить его как зависимость в родительском pom, чтобы все модули наследуют его автоматически, но это создаст проблему циклической зависимости, которая остановит работу mvn.
На самом деле, даже если в модуле нет модульных или интеграционных тестов, модуль все равно должен объявить зависимость.
Я также должен сделать модуль, содержащий com.adam.testutil.IntegrationTest
, первым модулем в порядке сборки, иначе он не будет доступен при первой установке на новых системах. У меня возникает дилемма курицы и яйца: я не могу просто запустить mvn install
в пустом репозитории, потому что зависимости с IntegrationTest
еще нет в локальном репозитории.
На самом деле я не особенно хочу создавать новый модуль только для предоставления IntegrationTest
. Было бы намного проще, если бы JUnit включил в библиотеку подходящий класс org.junit.IntegrationTest
.
Хотя я думаю, что @Cateogry
— отличный способ аннотировать тесты, чтобы пометить их как интеграционные, в многомодульном проекте у него есть все эти недостатки.
Есть ли подходящий интерфейс или интерфейс с подходящим названием, который я мог бы использовать вместо того, чтобы иметь свой собственный?
В худшем случае, что касается JUnit, @Category
, maven-surefire-plugin и maven-failsafe-plugin, я мог бы использовать интерфейс в JDK, например. java.lang.Cloneable — хотя любой, кто читает код, задается вопросом, что, черт возьми, происходит.
Я надеялся, что в JUnit что-то есть, но не нашел ничего полезного.
Я мог бы просто поставить зависимость от сторонней библиотеки в своем родительском pom, и все было бы хорошо.
Я приму ответ от любого, кто предложит подходящий интерфейс из сторонней библиотеки, где имя интерфейса не вызовет немедленных вопросов у любого, кто впервые читает код.
import org.junit.experimental.categories.Category
import com.adam.testutil.IntegrationTest
@Category(IntegrationTest.class)
public DbAndJpaIntegrationTests {
...
}
.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<excludedGroups>com.bp.gis.util.HeavyTest
</excludedGroups>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<includes>
<include>**/*.java</include>
</includes>
<groups>com.bp.gis.util.HeavyTest</groups>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
</plugin>
IntegrationTest
и какая структура вашего модуля используется на данный момент? - person Naman   schedule 09.12.2016