2017-01-23 18 views
6

私は複数のモジュールと1つの共通の親モジュールを持つmavenプロジェクトを持っています。このプロジェクトでは、Junitとsurefire、BDD Cucumberの統合テストと一緒に実行されるいくつかの単体テストがあります。私は2つの別々のジョブを実行したいと思います.1つはすべての単体テストを実行し、もう1つはBDD /統合テストを実行するものです。そのために、私はそうのようなJUnitのカテゴリアノテーションで私のBDDランナークラスを注釈を付けています Maven経由でJunitカテゴリでキュウリ試験を実行する

@RunWith(Cucumber.class) 
@CucumberOptions(
       tags = { "@ATagToBeRun", "[email protected]","[email protected]" }, 
       dryRun = false, strict = true, 
       features = "src/test/resources/cucumber/testing", 
       glue = { "com.some.company.test", 
         "com.some.company.another.test"}) 
@Category(value = IntegrationTest.class) 
public class FlowExecutionPojoTest { 
} 

私は上のテストベースをフィルタリングするために意図され maven-surefire-plugin機能を使用して、親 pomでMavenのプロファイルを作成しましたグループ。私が期待したもの

 <dependencies> 
     <dependency> 
      <groupId>info.cukes</groupId> 
      <artifactId>cucumber-java</artifactId> 
      <version>1.2.4</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>info.cukes</groupId> 
      <artifactId>cucumber-junit</artifactId> 
      <version>1.2.4</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>info.cukes</groupId> 
      <artifactId>cucumber-spring</artifactId> 
      <version>1.2.4</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>info.cukes</groupId> 
      <artifactId>cucumber-jvm-deps</artifactId> 
      <version>1.0.5</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <profile> 
     <id>testJewels</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <modules> 
      <module>../my-module</module> 
     </modules> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>2.19.1</version> 
        <configuration> 
         <groups>com.some.company.IntegrationTest</groups> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 

は、私が<groups>タグに含まれているカテゴリで注釈を付けmvn test -PtestJewelsクラスを実行したときに実行されなければならないということでした。ここに私のMavenの構成です。実際には注釈付きクラスは実行されませんでした。

興味深いことに、私がmaven-surefire-pluginバージョン2.18を使用したとき、これは機能しましたが、バージョン2.18.1以降では機能しませんでした。ページの一番下にdocumentationによると、継承されているカテゴリに関するバージョン2.18.1の変化はありましたが、彼らは

+1

あなたのPOM依存関係を共有できますか?キュウリジャワ、キュウリジャニットパッケージ? – eg04lt3r

+0

@ eg04lt3r確かなこと、質問に追加 – Jewels

答えて

2

にいるされている私の場合、私はpull requestを修正するためにcucumber-jvmリポジトリに実際に存在していることを発見しましたこの特定の問題。問題は、Junitが@Categoryアノテーションに基づいてテストランナークラスをフィルタリングするときに、すべての子クラスもチェックするという事実のために発生します。 .featureファイルを実行するキュウリ試験の場合、.featureファイルを表すすべてのクラスもチェックされます(キュウリはファイルをFeatureRunnerクラスのインスタンスに変換します)。アノテーションがFeatureRunnerクラスに存在しないため、テストは除外され、実行されません。 (バージョン2.18.1より前のバージョンでは、maven-surefire-pluginは子クラスに注釈をチェックしなかったため、問題はありませんでした。)特定のモジュールなので、同じように、子モジュールで<groups>設定を上書きすることでした:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <configuration> 
       <groups combine.self="override"></groups> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

これは明らかに異なる設定では動作しません、キュウリチームがPRをマージするためにまだ持っていることは、むしろ不幸です

関連する問題