1. 程式人生 > 其它 >maven 打包跳過測試_Maven測試外掛

maven 打包跳過測試_Maven測試外掛

技術標籤:maven 打包跳過測試maven打包跳過測試

在Maven專案中,使用者基於 JUnit 或 TestNG 編寫好了測試程式碼,接下來怎麼執行,並且形成測試報告呢?具體執行測試程式碼,需要靠 maven-surefire-plugin 外掛來實現。

Surefire 外掛簡介

Maven 本身雖然不是測試框架,但是 Maven 能夠在構建執行到特定的生命週期階段的時候,通過呼叫外掛執行基於 JUnit 和 TestNG 編寫好的測試用例。這個外掛就是 maven-surefire-plugin 外掛,它能很好地相容 JUnit 系列和 TestNG 測試框架。在 Maven 的 default 生命週期的 test 階段,繫結的預設外掛是 maven-surefire-plugin。這是一個內建繫結,在預設情況下,maven-surefire-plugin 的 test 階段會自動執行測試原始碼路徑下的所有符合命名模式的測試類。符合命名模式的規範是:

  • **/Test*.java:所有命名為 Test 開頭的Java類。

  • **/*Test.java:所有命名為 Test 結尾的 Java 類。

  • **/*TestCase.java:所有命名為 TestCase 結尾的 Java 類。

只要測試類符合上面的命名模式,Maven 都會自動執行它們,不需要再定義測試集合來宣告要執行哪些測試類。如果測試程式碼是基於 TestNG 框架的,還可以通過配置檔案靈活地指定需要執行的測試案例類。具體的寫法請參考前面關於 TestNG 的介紹。

跳過測試

在實際專案中,要使 Maven 的構建過程暫時跳過測試環境(不執行測試案例),可以在執行 mvn 命令的後面通過新增 skipTests 引數實現,程式碼如下:

Mvn package -DskipTests

不過雖然可以通過該方式跳過測試階段,但是這種操作和思路是不提倡的,因為釋出和使用一個沒有經過測試的構件有很大的風險。除了可以在 mvn 命令後面通過指定 skipTests 引數標明跳過測試外,還可以在 pom 中的 maven-surefire-plugin 外掛配置中進行宣告,程式碼如下:

<plugin>    <groupId>org.apache.maven.pluginsgroupId>    <artifactId>maven-surefire-pluginartifactId>    <version>2.16version>
<configuration> <skipTests>trueskipTests> configuration>plugin>

除了在 Maven 構建過程中跳過執行測試程式碼外,還可以直接跳過對測試的編譯。

同樣地,這裡可以通過命令列指定,也可以通過 pom 的配置檔案指定。Maven 命令指定程式碼如下:

Mvn package -Dmaven.test.skip=true

其中,maven.test.skip 引數同時控制 maven-compile-plugin 和 maven-surefire-plugin 兩個外掛的行為:既跳過了測試程式碼的編譯,也跳過了測試程式碼的執行。pom 配置檔案的指定程式碼如下:

<plugin>    <groupId>org.apache.maven.pluginsgroupId>    <artifactId>maven-compiler-pluginartifactId>    <version>2.1version>    <configuration>        <skip>trueskip>    configuration>plugin><plugin>    <groupId>org.apache.maven.pluginsgroupId>    <artifactId>maven-surefire-pluginartifactId>    <version>2.16version>    <configuration>        <skip>trueskip>    configuration>plugin>

個性化指定執行測試

在實際專案中,使用者可能需要靈活地指定執行某些測試案例。這時候,就可以通過 mvn 命令的 test 引數來實現,程式碼如下:

Mvn test -Dtest=TestDemo

表示只執行 TestDemo 測試類。同樣地,還可以在 test 引數中,用“∗”萬用字元指定執行符合規則的所有測試類。例如:

Mvn test -Dtest=Test*Demo

表示執行類名為 Test 開頭,Demo 結尾的所有測試類。如果不嫌麻煩,也可以通過 test 引數明確指定要執行的測試類名。例如:

Mvn test -Dtest=TestDemo1,TestDemo2

表示執行類名為 TestDemo1 和 TestDemo2 的所有測試類。注意,指定的多個測試類之間要用逗號隔開。同樣,這裡也可以將“∗”萬用字元和明確指定測試類的兩種方式結合起來,以達到更靈活的效果。例如:

Mvn test -Dtest=TestA*,TestDemo1,TestDemo2

表示執行類名以 TestA 開頭的所有的測試類和 TestDemo1、TestDemo2 測試類。最後需要說明的是,如果 maven-surefire-plugin 根據 test 引數找不到任何匹配的測試類的話,會報測試失敗。例如:

Mvn test -Dtest

這樣的命令肯定找不到一個測試類,就會導致失敗。

包含和排除測試

Maven 提倡約定優於配置原則,所以使用者在寫測試程式碼的時候,應儘量按規範的模式給測試類起名字。但是有時候難免會出現一些不符合模式的測試類名,而這些測試類又需要執行。這裡可以通過如下方式,在 maven-surefire-plugin 中進行配置實現。

<plugin>    <groupId>org.apache.maven.pluginsgroupId>    <artifactId>maven-surefire-pluginartifactId>    <version>2.16version>    <configuration>        <includes>            <include>**/Demo*.javainclude>        includes>    configuration>plugin>

通過上面的配置,Surefire 外掛就會自動執行所有命名以 Demo 開頭的測試類。同樣地,可以通過 excludes 描述排除哪些測試類。例如:

<plugin>    <groupId>org.apache.maven.pluginsgroupId>    <artifactId>maven-surefire-pluginartifactId>    <version>2.16version>    <configuration>        <excludes>            <exclude>**/*abc.javaexclude>            <exclude>**/Temp*.javaexclude>        excludes>    configuration>plugin>

表示不執行所有命名以 abc 結尾的測試類和以 Test 開頭的測試類。

d50bd8ed4e320b488816287480781167.png