JUnitカテゴリとMavenを使用して、それらを非常に簡単に分割できます。
これは、ユニットの分割と統合テストによって、非常に簡単に以下に示されています。
マーカーインターフェイスを定義する
カテゴリを使用してテストをグループ化する最初のステップは、マーカーインターフェイスを作成することです。
このインターフェースは、統合テストとして実行するすべてのテストをマークするために使用されます。
public interface IntegrationTest {}
テストクラスにマークを付ける
テストクラスの先頭にカテゴリアノテーションを追加します。新しいインターフェースの名前が付けられます。
import org.junit.experimental.categories.Category;
@Category(IntegrationTest.class)
public class ExampleIntegrationTest{
@Test
public void longRunningServiceTest() throws Exception {
}
}
Mavenユニットテストの構成
このソリューションの優れている点は、単体テストの側面では実際には何も変わらないことです。
統合テストを無視するように、mavensurefireプラグインにいくつかの構成を追加するだけです。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.12</version>
</dependency>
</dependencies>
<configuration>
<includes>
<include>**/*.class</include>
</includes>
<excludedGroups>com.test.annotation.type.IntegrationTest</excludedGroups>
</configuration>
</plugin>
mvn cleanテストを実行すると、マークされていない単体テストのみが実行されます。
Maven統合テストの構成
この場合も、この構成は非常に簡単です。
統合テストのみを実行するには、次を使用します。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.12</version>
</dependency>
</dependencies>
<configuration>
<groups>com.test.annotation.type.IntegrationTest</groups>
</configuration>
</plugin>
これをidのプロファイルでラップすると、IT
を使用して高速テストのみを実行できますmvn clean install
。統合/低速テストのみを実行するには、を使用しますmvn clean install -P IT
。
ただし、ほとんどの場合、デフォルトで高速テストを実行し、すべてのテストを-P IT
。その場合は、トリックを使用する必要があります。
<profiles>
<profile>
<id>IT</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludedGroups>java.io.Serializable</excludedGroups> <!-- An empty element doesn't overwrite, so I'm using an interface here which no one will ever use -->
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
ご覧のとおり、で注釈が付けられているテストは除外していjava.io.Serializable
ます。<excludedGroups/>
プロファイルはSurefireプラグインのデフォルト構成を継承するため、これが必要です。したがって、またはと言っても<excludedGroups></excludedGroups>
、値com.test.annotation.type.IntegrationTest
が使用されます。
none
また、クラスパス上のインターフェースである必要があるため、使用できません(Mavenがこれをチェックします)。
ノート:
- への依存関係
surefire-junit47
は、MavenがJUnit4ランナーに自動的に切り替わらない場合にのみ必要です。groups
or要素を使用するとexcludedGroups
、スイッチがトリガーされます。ここを参照してください。
- 上記のコードのほとんどは、Mavenフェイルセーフプラグインのドキュメントから取得したものです。このページの「JUnitカテゴリーの使用」のセクションを参照してください。
@RunWith()
テスト中に、アノテーションを使用してスイートまたはSpringベースのテストを実行する場合でもこれが機能することがわかりました。