1

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) を使用したテストも実行を開始しました。

これは確実なプラグインのバグですか。ドキュメントによると、指定されたカテゴリのテストのみを実行する必要があります。

ここで何か不足していますか?

4

1 に答える 1

0

2.12.1 (またはそれ以降、最新バージョンは 2.15) にアップグレードしてみてください。2.12 には次のバグがあります。

SUREFIRE-832: JUnit カテゴリは、junit47 プロバイダーが明示的に設定されている場合にのみ機能します

アップグレードできない場合は、junit プロバイダーを明示的に指定します。JUnit の使用ページのプロバイダーの手動指定を参照してください。

于 2013-06-24T16:08:35.480 に答える