2010-06-23 219 views
54

使用JUnit 4.8和新的@Category標註,有沒有辦法選擇Maven的Surefire插件運行的類別子集?如何在Maven中按類別運行JUnit測試?

比如我有:

@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,所以我想知道是否有類似的設施可以使用?

+0

參見[TestNG的混合和JUnit(http://stackoverflow.com/questions/9172820/mix-testng-junit-with-maven-surefire-plugin-version-2-11-and-higher-for-integ)瞭解更多詳情。從maven-surefire-plugin 2.11版支持類別 – 2012-02-29 13:50:48

回答

1

不完全一樣的東西,但使用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

67

的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)

+7

版本2.11對我不起作用,因爲Surefire一直忽略我指定的組。升級到surefire插件版本2.12.3的竅門 – 2012-09-12 22:11:58

+5

儘管如何爲不同的類別做多種配置?即OP希望能夠在命令行上指定一個類別,但是如果在POM中指定了該類別,那麼如何在命令行中指定一個類別? – 2013-02-26 16:50:22

+0

注意!版本2.11忽略組!在http://maven.apache.org/surefire/maven-surefire-plugin/examples/junit.html#Using_JUnit_Categories下提供的示例仍然不正確! – Heezer 2013-04-24 12:39:07

38

在此基礎上blog post - 和簡化 - 添加到您的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 
+0

surefire插件的2.13版本不適合我。我得到了這個錯誤:「組/ excludedGroups需要項目測試類路徑上的TestNG或JUnit48 +」,儘管我使用的是Junit 4.11。將surefire插件降級到2.12.2解決了錯誤。 – 2014-03-27 11:48:54

+0

這對我來說,使用Surefire 2.17版本。我必須將org.apache.maven.surefire:surefire-junit47:2.13依賴項更改爲org.apache.maven.surefire:common-junit48:2.17。 – Kkkev 2014-05-12 10:55:19

+0

運行兩個配置文件togather沒有爲我工作 – 2018-01-16 14:06:53

5

您可以使用

mvn test -Dgroups="com.myapp.FastTests, com.myapp.SlowTests" 

但確保您配置正確的行家萬無一失插件

<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

16

我有我想要的類似案例運行除給定類別之外的所有測試(例如,因爲我有數百個遺留的未分類測試,並且我不能/不希望修改它們中的每一個)

Maven的萬無一失插件允許排除類別,例如:

<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> 
+0

熱你會設置只運行一個特定的組? – 2Big2BeSmall 2016-08-10 13:38:31

+1

@Francy只是運行相應的配置文件,從這個例子:mvn test -P NonSlowTests – Joel 2016-08-30 13:01:40

+0

你能否排除多個組? – 2016-11-10 01:52:42

3

我失去了很多時間在這個錯誤「團體/ excludedGroups需要TestNG的或JUnit48 +項目測試類路徑」,因爲我以爲我所用junit的糟糕版本,surefire插件的錯誤版本或者不適合的組合。

這並非如此:在我的項目中,我有一個「配置」模塊,它是在我想測試的模塊之前構建的。該模塊沒有JUnit的依賴 - >它必須在類路徑中沒有junit的...

這個錯誤可以幫助別人......

相關問題