junit の @category を使用して、単体テストと統合テストを区別したいと考えています。UnitTest と IntegrationTests という名前の 2 つのインターフェイスを作成しました。テスト クラスとテスト メソッドに @Category(UnitTest.class) と @Category(IntegrationTest.class) のアノテーションを付けています。
モジュールに Maven Sure Fire プラグインと Maven Fail Safe プラグインを設定しました。
pomファイルは次のようになります
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mygroup</groupId>
<artifactId>my-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>My Parent Module</name>
<properties>
<skipTests>false</skipTests>
<skipITs>true</skipITs>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.12</version>
<configuration>
<skipITs>${skipITs}</skipITs>
<groups>com.myproject.IntegrationTest</groups>
<includes>
<include>**/*.java</include>
</includes>
</configuration>
<executions>
<execution>
<id>failsafe-integration-tests</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
<configuration>
<groups>com.myproject.UnitTest</groups>
<excludedGroups>com.myproject.IntegrationTest</excludedGroups>
<includes>
<include>**/*.java</include>
</includes>
<skipTests>${skipTests}</skipTests>
<systemProperties>
<property>
<name>targetURI</name>
<value>${targetURI}</value>
</property>
</systemProperties>
</configuration>
</plugin>
</plugins>
</build>
</project>
mvn clean install を実行すると (単体テスト (Maven Sure Fire プラグイン) だけが実行され、統合テスト (Maven Fail Safe) がスキップされることを期待しています)、これは問題なく行われているようです。
しかし、奇妙なことに、Maven Sure Fire プラグインはタグを尊重しません。@Category(UnitTest) とカテゴリのないものの両方でテストを実行することになります。ただし、 @IntegrationTest を使用したテストはスキップされています。
カテゴリ @unitTests 以外のすべてのテストはスキップされると思いました。
確実なプラグイン構成から com.myproject.IntegrationTest を削除しようとしましたが、@category (IntegrationTest.class) を使用したテストも実行を開始しました。
これは確実なプラグインのバグですか。ドキュメントによると、指定されたカテゴリのテストのみを実行する必要があります。
ここで何か不足していますか?