分类: maven 2012-05-09 15:17 1986人阅读 评论(1) 收藏 举报
 
 

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.Test org.testng.annotations.Test 标注方法为测试方法
org.junit.Assert org.testng.Assert 检查测试结果
org.junit.Before org.testng.annotations.BeforeMethod 标注方法在每个测试方法之前运行
org.junit.After org.testng.annotations.AfterMethod 标注方法在每个测试方法之后运行
org.junit.BeforeClass org.testng.annotations.BeforeClass 标注方法在所有测试方法之前运行
org.junit.AfterClass org.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>

Maven运行JUnit测试(http://www.360doc.com/content/13/0927/15/7304817_317455642.shtml)的更多相关文章

  1. http://www.360doc.com/content/13/0516/22/12094763_285956121.shtml

    http://www.360doc.com/content/13/0516/22/12094763_285956121.shtml

  2. 在命令行中运行JUnit测试

    可以在Eclipse之外运行JUnit测试,使用org.junit.runner.JUnitCore类. 这个类提供了runClasses()方法,它允许运行一个或多个测试类.runClasses() ...

  3. testng入门教程11 TestNG运行JUnit测试

    现在,您已经了解了TestNG和它的各种测试,如果现在担心如何重构现有的JUnit代码,那就没有必要,使用TestNG提供了一种方法,从JUnit和TestNG按照自己的节奏.也可以使用TestNG执 ...

  4. http://www.360doc.com/content/12/1014/00/7471983_241330790.shtml

    http://www.360doc.com/content/12/1014/00/7471983_241330790.shtml

  5. http://www.360doc.com/content/10/1012/09/3722251_60285817.shtml

    http://www.360doc.com/content/10/1012/09/3722251_60285817.shtml http://www.docin.com/p-163063250.htm ...

  6. http://www.360doc.com/content/18/0406/16/15102180_743316618.shtml

    http://www.360doc.com/content/18/0406/16/15102180_743316618.shtml

  7. System.Thread.TImer控件——http://www.360doc.com/content/11/0812/11/1039473_139824496.shtml

    http://www.360doc.com/content/11/0812/11/1039473_139824496.shtml

  8. http://www.360doc.com/content/12/0516/14/1671317_211422841.shtml

    http://www.360doc.com/content/12/0516/14/1671317_211422841.shtml

  9. http://www.360doc.com/content/14/0313/17/16070877_360315087.shtml

    http://www.360doc.com/content/14/0313/17/16070877_360315087.shtml

随机推荐

  1. 记录-spring MultipartFile 文件上传

    注意:以下上传和下载方法未必完全正确,不同浏览器效果不同,建议不要使用IE /** * 简单的文件上传 * @author:qiuchen * @createTime:2012-6-19 * @par ...

  2. 九度OJ 1250:矩阵变换 (矩阵运算)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:95 解决:47 题目描述: 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一, 现给出一正数矩 ...

  3. spring bean标签常用属性

    一.id属性 其名称,可以是任意名称,但不能包含特殊符号. 根据id得到配置对象. 二.class属性 创建对象所在的类名称 三.name属性 功能和id属性一样,但name属性值可以包含特殊属性 四 ...

  4. Function- 几个转换函数

    几个转换函数 SJIS_DBC_TO_SBC 全角转半角SJIS_SBC_TO_DBC 半角转全角 CLPB_IMPORT :从剪贴板导入internal tableCLPB_EXPORT : 从in ...

  5. $.ajax()方法详解(转)

    转: http://www.cnblogs.com/tylerdonet/p/3520862.html 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: ...

  6. Broadcast Intent & Broadcast Receiver

    当Android系统发生某种状况,必须通知所有程序进行处理时,例如电量不足等,可利用Broadcast Intent对象的功能来进行信息广播. 运行机制包括两部:送出Intent对象的程序:监听广播信 ...

  7. linux 11 -- mount,umount

    Linux 文件系统是一个以 / 为根的大树,我们在不同的设备和分区上都有文件系统.我们如何处理这种明显的不一致性?根 (/) 文件系统是在初始化过程中挂载的.您创建的其他每个文件系统在挂载 在挂载点 ...

  8. python基础9 -----python内置函数2

    一.python内置所以函数     Built-in Functions     abs() divmod() input() open() staticmethod() all() enumera ...

  9. GUI菜单——菜单条、菜单、子条目之间关系

    菜单:注意区分三个概念:菜单条.菜单.菜单项 将菜单条添加到窗体,菜单条下面包括菜单,菜单下面可以使菜单或者菜单项 菜单项是最后一个.菜单后面有三角标示. 菜单条[文件] 子菜单--子条目 子条目 示 ...

  10. Android关闭USB的ADB调试和文件传输功能(禁用USB)【转】

    本文转载自:https://blog.csdn.net/jun4331247/article/details/51201825 通过设置系统属性(System Property)[persist.sy ...