2017-01-23 122 views
6

我有一個包含多個模塊和一個常見父模塊的maven項目。在這個項目中,有一些單元測試和Junit一起運行,以及BDD Cucumber集成測試。我想運行兩個獨立的作業,一個運行所有單元測試,另一個運行BDD /集成測試。爲了做到這一點,我已經註解我BDD亞軍類有一個Junit的類別標註,像這樣:通過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 { 
} 

我創建父pom Maven的配置文件,它使用maven-surefire-plugin功能,是爲了在過濾試驗基地組。這裏是我的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> 

我希望那是什麼,當我運行mvn test -PtestJewels與包含在<groups>標籤類別註釋的類應該執行。實際上沒有任何註釋類被執行。

值得注意的一點是,當我使用maven-surefire-plugin版本2.18這個工作,但從版本2.18.1,並沒有。按照documentation在頁面的底部,有在被繼承類關於版本2.18.1但在我的情況下,他們在

+1

你能分享你的pom依賴嗎? cucumber-java,cucumber-junit軟件包? – eg04lt3r

+0

@ eg04lt3r確定的事情,將其添加到問題 – Jewels

回答

2

是我發現原來有上cucumber-jvm庫來修復pull request變化這個具體問題。這個問題是由於以下事實造成的:當Junit基於@Category註釋過濾測試運行器類時,它也會檢查所有子類。在運行.feature文件的黃瓜測試中,也檢查代表.feature文件的所有類(黃瓜在FeatureRunner類的實例中將每個.feature文件轉換)。由於FeatureRunner類中不存在註釋,因此測試會被過濾掉而不會運行。 (之前版本2.18.1 maven-surefire-plugin沒有檢查子類的註釋,因此這不是一個問題。

解決方法,適用於我上面描述的特定設置,其中所有的BDD測試運行在具體的模塊,是覆蓋<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我上面提到