1. 程式人生 > >使用maven執行單元測試總結

使用maven執行單元測試總結

maven本身沒有單元測試框架,但是maven的default生命週期的test階段綁定了maven-surefire-plugin外掛,該外掛可以呼叫Junit3、Junit4、TestNG等Java流行測試框架完成單元測試。

在pom中加入Junit依賴

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.11</version>
</dependency>

約定優於配置

maven的default生命週期的test階段與maven-surefire-plugin外掛的test外掛目標內建繫結。預設情況下,maven-surefire-plugin的test目標會自動執行測試原始碼路徑(預設:src/test/java)下的所有符合一組命名規則的測試類。該命名規則如下:

1. **/Test*.java 任何子目錄下所有命名以Test開頭的java類
2. **/*Test.java 任何子目錄下所有命名以Test結尾的java類
3. **/*TestCase.java 任何子目錄下所有命名以TestCase結尾的java類

跳過測試

pom中配置

  • skipTests配置,跳過測試執行階段
 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <skipTests>true</skipTests>
    </configuration>
</plugin>
  • skip配置,跳過測試執行階段
 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <skip>true</skip>
    </configuration>
 </plugin>

mvn命令列中加入引數

  • skipTests
mvn clean package -DskipTests=true
  • maven.test.skip(需要注意的是,maven-compiler-plugin外掛的testCompile外掛目標和maven-resources-plugin外掛的testResources外掛目標也有這個引數,如果使用-Dmaven.skip.test=true,則跳過了測試資原始檔處理、測試程式碼編譯和執行三個階段。關於maven的生命週期和外掛的詳細描述,請參考我的另兩篇部落格:maven生命週期詳解Maven外掛詳解)
mvn clean package -Dmaven.test.skip=true

說明:此處的“maven.test.skip”為maven-surefire-plugin外掛的test外掛目標的引數的表示式,其對應的外掛目標引數為上面pom中配置的skip引數。並不是所有外掛目標引數都有表示式,也就是說,一些外掛目標引數只能在pom中配置。關於外掛目標引數和其表示式的詳細資訊,可以去maven官網的對應外掛章查詢,地址為:maven官網外掛。maven-surefire-plugin中skip的描述如下所示(請放大檢視☺):
skip&skipTests
跳過測試命令執行情況請參考我的另一篇部落格:maven跳過單元測試的兩個引數區別

動態指定要執行的測試用例

使用test引數可以在命令列指定要執行的測試用例的類名。

1. mvn test -Dtest=demomavenTest 指定單個測試執行類
2. mvn test -Dtest=demo*Test 指定所有以demo開頭以Test結尾的測試類
3. mvn test -Dtest=demo*Test, heheTest 以逗號隔開多個指定的測試類

注意:當test引數沒有值時,預設構建會失敗。此時加上failIfNoTests=false,即使沒有測試也不報錯:

mvn test -Dtest -DfailIfNoTests=false 

上述命令不會執行任何測試,構建也能順利完成。這也是一種跳過所有測試完成構建的方法。

包含與排除測試用例

pom中可以配置includes和excludes引數來包含和排除指定的測試類:

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <includes>
          <include>**/*Tests.java</include>
        </includes>
        <excludes>
          <exclude>**/*ServiceTest.java</exclude>
          <exclude>**/ServiceTest*.java</exclude>
        </excludes>
    </configuration>
 </plugin>

(本文是看了大神徐曉斌的maven3 in action一書的相關章節之後的讀書筆記和自己平時使用maven的一些經驗,僅用於學習交流。)