使用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的描述如下所示(請放大檢視☺):
跳過測試命令執行情況請參考我的另一篇部落格: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的一些經驗,僅用於學習交流。)