maven install时自动施行单元测试

maven install时自动施行单元测试

maven install时自动执行单元测试

1.maven-surefire-plugin简介

Maven本身并不是一个单元测试框架,它只是在构建执行到特定生命周期阶段的时候,通过插件来执行JUnit或者TestNG的测试用例。这个插 件就是maven-surefire-plugin,也可以称为测试运行器(Test Runner),它能兼容JUnit 3、JUnit 4以及TestNG。

在默认情况下,maven-surefire-plugin的test目标会自动执行测试源码路径(默认为src/test/java/)下所有符合一组命名模式的测试类。这组模式为:

  • **/Test*.java:任何子目录下所有命名以Test开关的Java类。
  • **/*Test.java:任何子目录下所有命名以Test结尾的Java类。
  • **/*TestCase.java:任何子目录下所有命名以TestCase结尾的Java类。

2.跳过测试

要想跳过 测试,在命令行加入参数skipTests就可以了。如:
  1. mvn package -DskipTests  

也可以在pom配置中提供该属性。
  1. plugin >   
  2.     groupId > org.apache.maven.plugins </ groupId >   
  3.     artifactId > maven-surefire-plugin </ artifactId >   
  4.     version > 2.5 </ version >   
  5.     configuration >   
  6.         skipTests > true </ skipTests >   
  7.     </ configuration >   
  8. </ plugin >   
 
有时候可能不仅仅需要跳过 测试运行,还要跳过 测试代码的编译:
  1. mvn package -Dmaven.test.skip=true  

也可以在pom中配置maven.test.skip:
  1. plugin >   
  2.     groupId > org.apache.maven.plugin </ groupId >   
  3.     artifactId > maven-compiler-plugin </ artifactId >   
  4.     version > 2.1 </ version >   
  5.     configuration >   
  6.         skip > true </ skip >   
  7.     </ configuration >   
  8. </ plugin >   
  9. plugin >   
  10.     groupId > org.apache.maven.plugins </ groupId >   
  11.     artifactId > maven-surefire-plugin </ artifactId >   
  12.     version > 2.5 </ version >   
  13.     configuration >   
  14.         skip > true </ skip >   
  15.     </ configuration >   
  16. </ plugin >   

3.动态指定要运行的测试用例

maven-surefire-plugin提供了一个test参数让Maven用户能够在命令行指定要运行的 测试用例。如:
  1. mvn test -Dtest=RandomGeneratorTest  

也可以使用通配符:
  1. mvn test -Dtest=Random*Test  

或者也可以使用“,”号指定多个 测试类:
  1. mvn test -Dtest=Random*Test,AccountCaptchaServiceTest  

如果没有指定 测试类,那么会报错并导致构建失败。
  1. mvn test -Dtest  

这时候可以添加-DfailIfNoTests=false参数告诉maven-surefire-plugin即使没有任何 测试也不要报错。
  1. mvn test -Dtest -DfailIfNoTests=false  

由此可见,命令行参数-Dtest -DfailIfNoTests=false是另外一种路过 测试的方法
 

4.包含与排除测试用例

如果由于历史原因, 测试类不符合默认的三种命名模式,可以通过pom.xml设置maven-surefire-plugin插件添加命名模式或排除一些命名模式。
  1. plugin >   
  2.     groupId > org.apache.maven.plugins </ groupId >   
  3.     artifactId > maven-surefire-plugin </ artifactId >   
  4.     version > 2.5 </ version >   
  5.     configuration >   
  6.         includes >   
  7.             include > **/*Tests.java </ include >   
  8.         </ includes >   
  9.         excludes >   
  10.             exclude > **/*ServiceTest.java </ exclude >   
  11.             exclude > **/TempDaoTest.java </ exclude >   
  12.         </ excludes >   
  13.     </ configuration >   
  14. </ plugin >   

5.生成测试报告

5.1基本测试报告

默认情况下,maven-surefire-plugin会在项目的target/surefire-reports目录下生成两种格式的错误报告。
  • 简单文本格式——内容十分简单,可以看出哪个测试项出错。
  • 与JUnit兼容的XML格式——XML格式已经成为了Java单元测试报告的事实标准,这个文件可以用其他的工具如IDE来查看。

5.2测试覆盖率报告

测试覆盖率是衡量项目代码质量的一个重要的参考指标。Cobertura是一个优秀的开源 测试覆盖率统计工具(详见 http://cobertura.sourceforge.net/),Maven通过cobertura-maven-plugin与之集成,用户可 以使用简单的命令为Maven项目生成 测试覆盖率报告。运行下面命令生成报告:
  1. mvn cobertura:cobertura  

6.运行TestNG测试

TestNG是Java社区中除了JUnit之外另一个流行的 单元测试框架。TestNG在JUnit的基础上增加了很多特性,其站点是http://testng.org/ .添加TestNG依赖:
  1. dependency >   
  2.     groupId > org.testng </ groupId >   
  3.     artifactId > testng </ artifactId >   
  4.     version > 5.9 </ version >   
  5.     scope > test </ scope >   
  6.     classifier > jdk15 </ classifier >   
  7. </ dependency >   
下面是JUnit和TestNG的常用类库对应关系
JUnit类TestNG类作用
org.junit.Testorg.testng.annotations.Test标注方法为测试方法
org.junit.Assertorg.testng.Assert检查测试结果
org.junit.Beforeorg.testng.annotations.BeforeMethod标注方法在每个测试方法之前运行
org.junit.Afterorg.testng.annotations.AfterMethod标注方法在每个测试方法之后运行
org.junit.BeforeClassorg.testng.annotations.BeforeClass标注方法在所有测试方法之前运行
org.junit.AfterClassorg.testng.annotations.AfterClass标注方法在所有测试方法之后运行
TestNG允许用户使用一个名为testng.xml的文件来配置想要运行的 测试集合。如在类路径上添加testng.xml文件,配置只运行RandomGeneratorTest
  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. suite   name = "Suite1"   verbose = "1" >   
  3.     test   name = "Regression1" >   
  4.         classes >   
  5.             class   name = "com.juvenxu.mvnbook.account.captcha.RandomGeneratorTest"   />  
  6.         </ classes >   
  7.     </ test >   
  8. </ suite >   

同时再配置maven-surefire-plugin使用该testng.xml,如:
  1. plugin >   
  2.     groupId > org.apache.maven.plugins </ groupId >   
  3.     artifactId > maven-surefire-plugin </ artifactId >   
  4.     version > 2.5 </ version >   
  5.     configuration >   
  6.         suiteXmlFiles >   
  7.             suiteXmlFile > testng.xml </ suiteXmlFile >   
  8.         </ suiteXmlFiles >   
  9.     </ configuration >   
  10. </ plugin >   
TestNG较JUnit的一大优势在于它支持 测试组的概念。如可以在方法级别声明 测试组:
  1. @Test (groups={ "util" , "medium" })  
然后可以在pom中配置运行一个或多个 测试组:
  1. plugin >   
  2.     groupId > org.apache.maven.plugins </ groupId >   
  3.     artifactId > maven-surefire-plugin </ artifactId >   
  4.     version > 2.5 </ version >   
  5.     configuration >   
  6.         groups > util,medium </ groups >   
  7.     </ configuration >   
  8. </ plugin >   

7.重用测试代码

当命令行运行mvn package的时候,Maven只会打包主代码及资源文件,并不会对 测试代码打包。如果 测试代码中有需要重用的代码,这时候就需要对 测试代码打包了。
这时候需要配置maven-jar-plugin将 测试类打包,如:
  1. plugin >   
  2.     groupId > org.apache.maven.plugins </ groupId >   
  3.     artifactId > maven-jar-plugin </ artifactId >   
  4.     version > 2.2 </ version >   
  5.     executions >   
  6.         execution >   
  7.             goals >   
  8.                 goal > test-jar </ goal >   
  9.             </ goals >   
  10.         </ execution >   
  11.     </ executions >   
  12. </ plugin >   
maven-jar-plugin有两个目标,分别为jar和test-jar。这两个目标都默认绑定到default生命周期的package阶段运行,只是test-jar并没有在超级POM中配置,因此需要我们另外在pom中配置。
 
现在如要引用test-jar生成的 测试代码包,可以如下配置:
  1. dependency >   
  2.     groupId > com.juvenxu.mvnbook.account </ groupId >   
  3.     artifactId > account-captcha </ artifactId >   
  4.     version > 1.0.0-SNAPSHOT </ version >   
  5.     type > test-jar </ type >   
  6.     scope > test </ scope >   
  7. </ dependency >   

转自:http://www.verydemo.com/demo_c290_i17360.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值