web-dev-qa-db-ja.com

MavenでカテゴリごとにJUnitテストを実行する方法は?

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を作成したばかりだと思うので、使用できる同様の機能があるかどうか疑問に思っていましたか?

69
Ran

Mavenはその後更新されており、カテゴリを使用できます。

Surefire documentation: の例

_<plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.11</version>
      <configuration>
        <groups>com.mycompany.SlowTests</groups>
      </configuration>
</plugin>
_

これは、注釈@Category(com.mycompany.SlowTests.class)でクラスを実行します

74
dmcnelis

これに基づいて ブログ投稿 -と簡素化-これを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
46
Mark Butler

特定のカテゴリを除くすべてのテストを実行する同様のケースがありました(たとえば、何百ものレガシーなカテゴリ未分類のテストがあり、各テストを変更できない/したくないため)

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>
20
Joel

使用できます

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

9
paucls

このエラー「プロジェクトテストクラスパスでグループ/ excludedGroupsにはTestNGまたはJUnit48 +が必要です」で多くの時間を失いました。

私のプロジェクトには、テストしたいモジュールの前に構築された「config」モジュールがありました。このモジュールにはjunitの依存関係がありませんでした->クラスパスにjunitがありませんでした...

この間違いは他の人を助けるかもしれません...

5
Remy

まったく同じではありませんが、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

1
Jesus Benito