1. 程式人生 > >使用maven進行測試(九)

使用maven進行測試(九)

maven本身並不是一個單元測試框架,java世界中主流的測試框架為junit和testng。maven所做的只是在構建執行到特定生命週期階段的時候,通過外掛來執行junit或者testng的測試用例。這一外掛就是maven-surefire=plugin,可以稱之為測試執行器,它能很好的相容junit3、junit4和testng。

maven的default生命週期test階段內建繫結上述外掛的test目標,外掛會執行特定目標下的符合命名格式的測試類,命名格式如下:

**/Test*.java:任何子目錄下所有命名以Test開頭的java類。

**/*Test.java:任何子目錄下所有命名以Test結尾的java類。

**/*TestCase.java:任何子目錄下所有命名以TestCase結尾的java類。

只有符合這些標準的測試類才會得以執行。

當然,如果有需要,可以自己定義要執行測試類的模式,另外上述外掛還支援更高階的testng測試集合xml檔案。

跳過測試執行

mvn package -DskipTests

長期跳過測試執行在pom中全域性設定外掛:

<plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.5</version>
          <configuration>
            <skipTests>true</skipTests>
          </configuration>

</plugin>

跳過測試編譯和執行

mvn package -Dmaven.test.skip=true,這個引數控制了兩個外掛,跳過了測試的編譯和執行。

永久跳過,在pom中全域性配置外掛:

<plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.5</version>
          <configuration>
            <sikp>true</sikp>
          </configuration>

</plugin>

<plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <skip>true</skip>
          </configuration>
</plugin>

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

mvn test -Dtest=abcTest   只執行這個abcTest測試類

mvn test -Dtest=abc*Test   星號可以匹配零個或者多個字元,表示執行以abc開頭Test結尾的所有測試類。

mvn test -Dtest=abcTest,defTest   只執行這兩個測試類。

mvn test -Dtest 如果只執行這個命令,外掛找不到測試類的情況下會導致構建失敗。

mvn test -Dtest -DfailIfNoTests=false 告訴外掛,即使沒有任何測試類也不要報錯。

遺憾的是,在命令列不能指定某個測試類做排除測試。

包含與排除測試用例:

**是指匹配任何路徑,*匹配除路徑分隔符外的0個或多個字元。

include元素指定要執行的測試用例,exclude指定要排除的測試用例。

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

</plugin>

測試報告的生成:maven-surefire-plugin生成測試報告

預設情況下,會在專案的target/surefite-reports目錄下生成兩種格式的錯誤報告:

1.簡單文字格式

2.與junit相容的xml格式,這個格式的報告可以用於三方工具的解析。

測試覆蓋率報告:cobertura-maven-plugin,生成在target/site/cobertura目錄下。

在pom.xml目錄下執行 mvn cobertura:cobertura

執行TestNG測試

testNG測試的普通用法和junit測試是一樣的,另外TestNG支援使用者使用一個testng.xml的檔案來配置想要執行的測試集合,testng.xml檔案放在根目錄下,檔案內容如:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suitename="Suite1"verbose="1">

<groups>

<run>

<includename="..."/><excludename="..."/></run>

</groups><testname="Regression1"> ...
</test>

</suite>另外,配置外掛cobertura-maven-plugin使用該testng.xml檔案

<plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.5</version>
          <configuration>
            <suiteXmlFiles>
              <suiteXmlFile>testng.xml</suiteXmlFile>
            </suiteXmlFiles>
          </configuration>
</plugin>

TestNG較junit的一大優勢是支援測試組的概念:

<plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.5</version>
          <configuration>
            <groups>util1,util2</groups>
          </configuration>
</plugin>

測試程式碼可以重用,我們可以把測試程式碼打包並部署到倉庫供其他專案使用:

<plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.2</version>
          <executions>
            <execution>
              <goals>
                <goal>test-jar</goal>
              </goals>
            </execution>
          </executions>
</plugin>

當需要引用測試jar包的時候,座標的型別用:<type>test-jar</type>