2017-09-12 35 views
0

我有一個JUnit 4.12 SlowTests測試套件,我想從執行中排除它,除非在Maven命令行中有特別的要求。如何在Maven中的excludedGroups中運行單元測試

我加入以下到我的POM文件:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.19</version> 
    <configuration> 
     <excludedGroups>com.Example.SlowTests</excludedGroups> 
     <includes> 
      <include>**/*TestSuite.class</include> 
     </includes> 
     <excludes> 
      <exclude></exclude> 
     </excludes> 
    </configuration> 
</plugin> 

我已經定義的類別爲SlowTests,並把它應用到MySlowTests類。

我已註釋的測試套件如下:

@RunWith(Categories.class) 
@IncludeCategory(SlowTests.class) 
@SuiteClasses({ MySlowTests.class }) 
public class MySlowTestSuite 

當運行mvn package所有除MySlowTests單元測試被執行。

然而,尋找不同的答案,如https://stackoverflow.com/a/25639372/820657https://stackoverflow.com/a/21830866/820657我希望下面的命令:

mvn package -Dgroups=com.Example.MySlowTests 

運行排除MySlowTests測試,但它們不運行。實際上沒有測試運行。

我在做什麼錯?

回答

1

Maven的Surefire插件在版本< 2.13(IIRC)的一些問題WRT類,但只要使用的是神火> = 2.13以下運行的類註解爲@Category(com.yourcompany.SlowTests.class)

<plugin> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.13</version> 
     <configuration> 
     <groups>com.yourcompany.SlowTests</groups> 
     </configuration> 
</plugin> 

這種方法經常使用配置文件,下面的配置使用...

<profiles> 
    <profile> 
     <id>slow</id> 
     <properties> 
      <testCategories>com.yourcompany.SlowTests</testCategories> 
     </properties> 
    </profile> 
    <profile> 
     <id>fast</id> 
     <properties> 
      <testCategories>com.yourcompany.FastTests</testCategories> 
     </properties> 
    </profile> 
</profiles> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.13</version> 
      <configuration> 
       <groups>${testCategories}</groups> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

...可以用來運行:

  • mvn install -P slow:運行速度慢的測試只
  • mvn install -P fast:運行快速測試僅
  • mvn install -P fast,slow:運行快,慢測試

更新1:這個問題:「有一種使用這種方法的方法,所以我可以默認運行所有快速測試?「

您可以定義兩個屬性:

<properties> 
    <includedCategories></includedCategories> 
    <excludedCategories>com.yourcompany.SlowTests</excludedCategories> 
</properties> 

像這樣然後更新您的神火插件定義:

<plugin> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.13</version> 
     <configuration> 
      <groups>${includedCategories}</groups> 
      <excludedGroups>${excludedCategories}</excludedGroups> 
     </configuration> 
    </plugin> 

最後,添加該配置文件:

<profile> 
     <id>slow</id> 
     <properties> 
      <includedCategories>com.yourcompany.SlowTests</includedCategories> 
      <excludedCategories></excludedCategories> 
     </properties> 
    </profile> 

這只是切換includedCategoriesexcludedCategories屬性。默認情況下,您的包括除了那些用com.yourcompany.SlowTests(即除了'慢'測試以外的所有內容)。當您使用-P slow運行時,您不包括除了那些用com.yourcompany.SlowTests註釋的測試(即除'慢'測試之外的所有測試)之外的所有內容。

注意:我在原始答案中提到的有關Surefire版本<的問題2.13使用類別行爲異常現象仍然存在,因此您需要使用Maven Surefire插件版本> = 2.13。

+0

有沒有辦法使用這種方法,所以我可以默認運行所有快速測試?我不想對所有的快速測試套件進行註釋。 – ksl

+0

@ksl我已經更新了包含該要求的實現細節的答案。 – glytching