`
leonzhx
  • 浏览: 791783 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

第十章 使用Maven进行测试

阅读更多

1.  com.google.code.kaptcha:kaptcha 是一个用来生成验证码的开源类库。其项目主页为: http://code.google.com/p/kaptcha . Kaptcha 并没有上传到中央仓库,我们可以从 Sonatype Forge http://repository.sonatype.org/content/groups/forge/ )仓库获得该构件。

 

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

 

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

1)  **/Test*.java :任何子目录下所有命名以 Test 开头的 Java 类。

2)  **/*Test.java :任何子目录下所有命名以 Test 结尾的 Java 类。

3)  **/*TestCase.java :任何子目录下所有命名以 TestCase 结尾的 Java 类。

 

4.  可以设置 -DskipTetst 命令行参数跳过测试的执行,也可以在 POM 中配置如下信息:

 

<plugin>

  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-surefire-plugin</artifactId>

  <version>2.5</version>

  <configuration>

    <skipTests>true</skipTests>

  </configuration>

</plugin>
 

5.  可以设置 -Dmaven.test.skip=true 跳过测试代码的编译和执行,也可以在 POM 中配置如下:

<plugin>

  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-compiler-plugin</artifactId>

  <version>2.1</version>

  <configuration>

    <skip>true</skip>

  </configuration>

</plugin>

<plugin>

  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-surefire-plugin</artifactId>

  <version>2.5</version>

  <configuration>

    <skip>true</skip>

  </configuration>

</plugin>
 

实际上 maven-compiler-plugin testCompile maven-surefire.plugin test 都提供了一个参数 skip ,它的命令行表达式为 maven.test.skip

 

6.  maven-surefire.plugin 提供了一个 test 参数,让 Maven 用户可以只运行指定的测试用例, test 参数的值是想指定的测试用例的类名,同时该参数还支持多个值以及通配符 :

mvn test –Dtest=Random*Test,AccountCaptchaServiceTest 。如果指定的类名不存在,会导致构建失败,但可以通过 -DfailIfNoTests=false 来避免失败。

 

7.   除了默认命名的测试文件 Maven 可以在 POM 配置中指定想包含或者想排除的测试类:

<plugin>
  
  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-surefire-plugin</artifactId>

  <version>2.5</version>

  <configuration>

    <includes>

      <include> **/*Tests.java</include>

    </includes>

    <excludes>

      <exclude> **/*ServiceTest.java</exclude>

      <exclude>**/TempDaoTest.java</exclude>

    </excludes>

  </configuration>

</plugin>
 

两个星号 ** 用来匹配任意路径,一个星号 * 匹配除路径分隔符外的 0 个或多个字符。

   

8.   默认情况下, maven-surefire-plugin 会在项目的 target/surefire-reports 目录下生成两种格式的错误报告:

1)  简单文本格式

2)  JUnit 兼容的 XML 格式(是 Java 单元测试报告的事实标准,可以用 Eclipse JUnit 插件直接打开,也可以被 Hudsonw 使用。)

 

9.  Cobertura 是一个优秀的开源测试覆盖率统计工具( http://cobertura.sourceforge.net/ ), Maven 通过 cobertura-maven-plugin 与之集成,用户可以使用如下命令为 Maven 项目生成测试覆盖率报告:

$ mvn cobertura:cobertura

打开 target/site/cobertura/index.html 文件就能看到具体的报告。

 

10.  TestNG Java 社区中除 JUnit 之外另一个流行的单元测试框架( http://testng.org )。使用 Maven 运行 TestNG 时,首先需要删除 POM 中的 JUnit 依赖,加入 TestNG 依赖:

<dependency>

  <groupId>org.testng</groupId>

  <artifactId>testing</artifactId>

  <version>5.9</version>

  <scope>test</scope>

  <classifier>jdk15</classifier>

</dependency>

 

  TestNG 使用 classifier jdk15 jdk14 为不同 Java 平台提供支持。

 

11.  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

标方法在所有测试方法之后运行

 

 

12.  可以在项目根目录下定义如下 testng.xml 文件来配置测试类的集合:

<?xml version=”1.0” encoding=”UTF-8” ?>

<suite name=”Suite1” verbose=”1” >

  <test name=”Regression1” >

    <classes>

      <class name=”com.juvenxu.mvnbook.account.captcha.RandomGeneratorTest” />

    </classes>

  </test>

</suite>

 

  同时再配置 maven-surefire-plugin 使用该 testng.xml

<plugin>

  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-surefire-plugin</artifactId>

  <version>2.5</version>

  <configuration>

    <suiteXmlFiles>

      <suiteXmlFile>testing.xml</suiteXmlFile>

    </suiteXmlFiles>

  </configuration>

</plugin>
 

 

13.  TestNG 支持测试组的概念,能让用户在方法级别对测试进行归类:( JUnit 只能支持类级别的测试归类)

@Test ( groups = { “util”, “medium”} )

   Maven 用户可以配置运行一个或者多个 TestNG 测试组:

<plugin>

  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-surefire-plugin</artifactId>

  <version>2.5</version>

  <configuration>

    <suiteXmlFiles>

      <groups>util,medium</groups>

    </suiteXmlFiles>

  </configuration>

</plugin>
 

 

14.  Maven 用户可以通过配置 maven-jar-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>
 

maven-jar-plugin 有两个目标,分别是 test test-jar ,前者通过 Maven 的内置绑定在 default 生命周期的 package 阶段运行,作用是对项目主代码进行打包,而后者没有内置绑定,其默认绑定生命周期阶段为 package

在声明一个测试包构件依赖时, type 元素的值需要设定为 test-jar

 

<dependency>

  <groupId>com.juvenxu.mvnbook.account</groupId>

  <artifactId>account-captcha</artifactId>

  <version>1.0.0-SNAPSHOT</version>

  <type>test-jar</type>

  <scope>test</scope>

</dependency>
分享到:
评论
3 楼 jackyin5918 2015-02-06  
顶,好文,很有帮助
2 楼 wufabeishang 2012-06-07  
maven-surefire-plugin.xml这个文件时怎么回事啊。具体怎么运行TestNG呢?
1 楼 wufabeishang 2012-06-07  
很不错的文章,为什么没有人评论呢。

相关推荐

    轻量级J2EE企业应用实战 源码 第十章

    最后,章节可能还会涉及持续集成和部署的话题,如使用Maven或Gradle进行项目构建,以及如何配置Docker容器化应用,以便于在不同环境中快速部署和扩展。 由于资料只提供了第十章的源码,因此具体的实现细节和示例...

    java案例开发集锦(源码第三部分 完)

    通常,这种命名方式表明每个目录对应于课程或教程的第九章和第十章,里面可能包含多个 Java 源代码文件(如 .java 文件)以及相关的说明文档或测试文件。 基于这些信息,我们可以推测这个案例开发集锦可能涵盖以下...

    JBPM5权威指南

    第十章 设计器 66 10.1 安装 67 第十一章 控制台 68 11.1 安装 68 11.2 运行流程管理控制台 68 11.2.1 管理流程实例 69 11.2.2 人工任务列表 71 11.2.3 报告 72 11.3 添加新的流程/任务表 73 11.4 REST interface 74...

    面向对象软件构造(第二版)中英对照版

    6. **构建与测试**:面向对象软件构造还包括自动化构建工具的使用,如Makefile或现代的Maven、Gradle,以及单元测试和集成测试的重要性,可能还会涉及JUnit等测试框架。 7. **反射与元编程**:这部分内容可能会讨论...

    JAVA WEB开发源码

    10. **第十章:Hibernate ORM** - Hibernate是一个流行的ORM(对象关系映射)框架,帮助开发者更方便地操作数据库。 11. **第十一章:Struts2框架** - Struts2是另一种MVC框架,讲解其工作原理和配置。 12. **第十...

    springlive(共11章)

    10. **第十章:Spring Security** - 认证与授权:理解身份验证和授权的基本概念,以及Spring Security提供的安全机制。 - 自定义安全配置:学习如何根据需求定制Spring Security的配置,保护应用程序的安全。 11....

    JSP应用开发详解(第二版)

    **第十章:MVC模式与JSP** - MVC模式的解释及其在Web开发中的应用 - JSP在MVC中的角色 - Struts、Spring MVC等框架如何实现MVC模式 **第十一章:JSP与JDBC** - 数据库连接池的概念和使用 - JSP中执行SQL查询 - 使用...

    轻量级Java EE 企业应用实战(第三版)

    压缩包中的“10”可能指的是第十章的代码示例,这部分可能涉及到上述某个或多个主题的实际应用,比如可能会讲解如何使用Spring框架实现RESTful服务,或者介绍CDI和EJB的轻量化实践。然而,由于没有具体的章节内容,...

    Pro Apache Hadoop, 2nd Edition

    第十章探讨了如何利用Hadoop实现数据仓库,包括如何存储和分析大量数据以支持商业智能。 **11. 使用Pig进行数据处理(Data Processing Using Pig)** 第十一章介绍了Pig,这是一个高级语言,它简化了Hadoop中的...

    struts2的教程

    “第十章 静态参数与session request response对象访问”讨论了如何在Action中访问HTTP请求、响应以及会话中的数据,以及如何设置和获取静态参数。 通过这个教程,开发者不仅可以了解Struts2的基本概念和工作原理,...

    《Spring Boot企业级开发教程》配套资料

    视频可能会覆盖Spring Initializr的使用,Maven或Gradle构建系统的配置,以及如何利用Spring Boot的Actuator进行应用监控。 教学大纲则为整个学习过程提供了路线图,列出了课程的主要章节和子话题。这通常包括...

    java面试宝典.doc

    第十章“开发工具”涵盖了IDE(如Eclipse、IntelliJ IDEA)、版本控制系统(如Git)、构建工具(如Maven、Gradle)等,熟练使用这些工具能提高开发效率。 第十一章“Linux操作系统”介绍了Linux命令行操作、文件...

    需要用netbeans导入的源代码

    在IT行业中,源代码是程序员用编程语言..."chap10"这个压缩包可能是一个课程的第十章代码示例,或者是某个特定功能的代码集。不论是什么,通过NetBeans的导入功能,我们可以轻松地在IDE中打开、理解和修改这些代码。

    基于SpringBoot的个人博客系统设计与实现-论文.pdf

    开发环境包括Java开发工具(如IntelliJ IDEA)、Spring Boot、Maven等;数据库选择MySQL,前端框架可以选择Bootstrap等。运行环境则需要Java运行时环境(JRE)和Web服务器(如Tomcat)。 5. 总体设计 系统采用MVC...

    jbpm学习资料

    **第十章 监视** 监视功能使管理员能够实时查看流程的性能指标,如运行时间、任务完成情况等,以便优化流程效率和诊断问题。 总结来说,jbPM是一个功能强大的BPM解决方案,它提供了完整的工具链,从流程设计到执行...

    jfinal-3.0-manual

    #### 第十章 Validator **10.1 概述** - **验证器**:Validator提供了丰富的验证功能,用于验证用户提交的数据是否符合预期的要求。 **10.2** - **待续**:更多详细的验证器使用方法将在后续章节中介绍。 --- ...

Global site tag (gtag.js) - Google Analytics