JUnit 4.8と新しい@Category
アノテーションを使用して、MavenのSurefireプラグインで実行するカテゴリのサブセットを選択する方法はありますか?
たとえば、私は持っています:
@Test
public void a() {
}
@Category(SlowTests.class)
@Test
public void b() {
}
そして、すべての低速でないテストを次のように実行したいと思います(-Dtest.categoriesは私が作成したことに注意してください...)。
mvn test -Dtest.categories=!SlowTests // run non-slow tests
mvn test -Dtest.categories=SlowTests // run only slow tests
mvn test -Dtest.categories=SlowTests,FastTests // run only slow tests and fast tests
mvn test // run all tests, including non-categorized
そのため、テストスイートを作成する必要はありません(Mavenはプロジェクト内のすべてのユニットテストを選択するだけで非常に便利です)。Mavenがカテゴリごとにテストを選択できるようにしたいのです。 -Dtest.categoriesを作成したばかりだと思うので、使用できる同様の機能があるかどうか疑問に思っていましたか?
Mavenはその後更新されており、カテゴリを使用できます。
_<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<configuration>
<groups>com.mycompany.SlowTests</groups>
</configuration>
</plugin>
_
これは、注釈@Category(com.mycompany.SlowTests.class)
でクラスを実行します
これに基づいて ブログ投稿 -と簡素化-これをpom.xmlに追加します。
<profiles>
<profile>
<id>SlowTests</id>
<properties>
<testcase.groups>com.example.SlowTests</testcase.groups>
</properties>
</profile>
<profile>
<id>FastTests</id>
<properties>
<testcase.groups>com.example.FastTests</testcase.groups>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.13</version>
<dependencies>
<dependency>
<groupId>org.Apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.13</version>
</dependency>
</dependencies>
<configuration>
<groups>${testcase.groups}</groups>
</configuration>
</plugin>
</plugins>
</build>
その後、コマンドラインで
mvn install -P SlowTests
mvn install -P FastTests
mvn install -P FastTests,SlowTests
特定のカテゴリを除くすべてのテストを実行する同様のケースがありました(たとえば、何百ものレガシーなカテゴリ未分類のテストがあり、各テストを変更できない/したくないため)
Maven surefireプラグインを使用すると、たとえば、カテゴリを除外できます。
<profiles>
<profile>
<id>NonSlowTests</id>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludedGroups>my.category.SlowTest</excludedGroups>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
使用できます
mvn test -Dgroups="com.myapp.FastTests, com.myapp.SlowTests"
ただし、maven surefireプラグインを適切に構成してください。
<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.2</version>
</dependency>
</dependencies>
</plugin>
次のドキュメントを参照してください: https://maven.Apache.org/surefire/maven-surefire-plugin/examples/junit.html
このエラー「プロジェクトテストクラスパスでグループ/ excludedGroupsにはTestNGまたはJUnit48 +が必要です」で多くの時間を失いました。
私のプロジェクトには、テストしたいモジュールの前に構築された「config」モジュールがありました。このモジュールにはjunitの依存関係がありませんでした->クラスパスにjunitがありませんでした...
この間違いは他の人を助けるかもしれません...
まったく同じではありませんが、surefireプラグインを使用すると、ファイル名に基づいてテストクラスを選択できます。ただし、Junitカテゴリは使用していません。
DAOテストのみを実行する例。
<executions>
<execution>
<id>test-dao</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<excludes>
<exclude>none</exclude>
</excludes>
<includes>
<include>**/com/proy/core/dao/**/*Test.Java</include>
</includes>
</configuration>
</execution>
http://maven.Apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html