Failures表示要測試的結果與預期值不一致;Errors表示測試代碼或產品代碼發生了未預期的錯誤;Skipped表示那些被標記為忽略的測試方法。在Junit中用戶可以使用@Ignore注解標記忽略測試方法。
Maven本身不是一個單元測試框架。Maven所做的只是在構建執行到特定生命周期階段的時候,通過插件來執行JUnit或TestNG的測試用例。Maven-surefire-plugin被稱之為測試運行器(Test Runner)。它可以兼容JUnit3,JUnit4以及TestNG。
在默認情況下,maven-surefire-plugin的test目標會自動執行測試源碼路徑(src/test/java)下所有符合一組命名模式的測試類。這組模式為:
**/Test*.java
**/*Test.java
**/*TestCase.java
只要將測試類按上述模式命名。Maven就能自動運行它們,用戶不需要定義測試集合來聚合測試用例。以Tests結尾的測試是不會得以自動執行的。
maven-compiler-plugin的testCompile和maven-surefire-plugin的test目標都提供了一個參數skip用來跳過測試編譯和測試運行。這個參數的命令行表達式為maven.test.skip
maven-surefire-plugin提供了一個test參數讓Maven用戶能夠在命令行指定要運行的測試用例。
mvn test -Dtest=**Test //指定運行**Test類
在POM中配置test運行的類
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.5</version> <configuration> <includes> <include>**/*Tests.java</include> </includes> </configuration> </plugin>
在POM中配置不運行那些測試類
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.5</version> <configuration> <exclusions> <exclusion>**/*ServiceTest.java</exclusion> </exclusions> </configuration> </plugin>
默認情況下,maven-surefire-plugin會在項目的target/surefire-reports目錄下生成兩種格式的錯誤報告:
簡單文本格式
與JUnit兼容的XML格式
測試覆蓋率是衡量項目代碼質量的一個重要參考指標。Cobertura是一個開源的測試覆蓋率統計工具。用戶可以使用更簡單的命令為Maven項目生成測試覆蓋率報告。
mvn cobertura:cobertura
TestNG
<dependency> <groupId>org.testing</groupId> <artifactId>testing</artifactId> <version>5.9</version> <scope>test</scope> <classifier>jdk15</classifier> </dependency>
TestNG允許用戶使用一個名為testing.xml的文件來配置想要運行的測試集合。
<?xmlv version="1.0" encoding="UTF-8" ?> <suite name="Suite1" verbose="1"> <test name="Regression1"> <classes> <class name="com.***.***.*Test" /> </classes> </test> </suite>
然后在maven-surefire-plugin中使用該testing
<plugin> <groupId>org.apache,maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifacId> <version>2.5</version> <configuration> <suiteXmlFiles> <suiteXmlFile>testing.xml</suiteXmlFile> </suiteXmlFiles> </configuration> </plugin>
TestNG較JUnit的一大優勢在於它支持測試組的概念。由於用戶可以自由地標注方法所屬的測試組,因此這種機制能讓用戶在方法級別對測試進行歸類。JUnit只能實現類級別的測試歸類。
@Test(groups={"util","medium"}) //將注解下的方法加入到兩個測試組util和medium中
<plugin> <groupId>org.apache.maven.plugin</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <groups>util,medium</groups> </configuration> </plugin>
Maven配置打包測試類
<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>
maven-jar-plugin有兩個目標,分別是jar和test-jar。前橫通過maven的內置綁定在default生命周期的package階段運行,其行為就是對項目主代碼進行打包,后者並沒有內置綁定。因此需要顯式聲明該目標來打包測試代碼。