使用Maven测试

  Maven的重要职责之一就是自动运行单元测试。它通过maven-surefire-plugin与主流的单元测试框架JUnit3、JUnit4以及TestNG集成,并且能够自动生成丰富的结果报告。

  Maven所作的只是在构建执行到特定生命周期阶段的时候,通过插件来执行JUnit或者TestNG的测试用例。这一插件就是maven-surefire-plugin,

可以称之为测试运行器(Test Runner),他能很好地兼容JUnit3、JUnit4以及TestNG。

  default生命周期,其中test阶段被定义为“使用单元测试框架运行测试”,test阶段正式与mavne-surefire-plugin的test目标相绑定了,这是一个内置的绑定。

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

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

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

  **/*TestCase.java:任何子目录下所有已TestCase结尾的Java类。  

  只要将测试类按上述模式命名,Maven就能自动运行他们,用户也就不需要定义测试集合(TestSuite)来聚合测试用例(TestCase)。

关于模式要注意的是,以Tests结尾的测试类是不会得以自动执行的。为了能够运行测试,Maven需要在项目中引入测试框架的依赖。

跳过测试:在Maven跳过测试,需在命令行加入参数skipTests就可以了。

  mvn package-DskipTests

  Maven输出会告诉你它跳过了测试:

  

  在POM中配置maven-surefire-plugin插件来提供该属性,但不推荐这个做法,如果配置POM让项目长时间跳过测试,测试代码变得没有意义。

  

  跳过测试运行和测试代码的编译(不推荐)

  mvn package-Dmaven.test.skip=true  

参数maven.test.skip同时控制了maven-compiler-plugin和maven-surefire-plugin两个插件的行为,测试代码编译跳过了,测试运行也跳过了。

  对应于命令行参数maven.test.skip的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-surefire-plugin提供了一个test参数让maven用户能够在命令行指定要运行的测试用例

  mvn test-Dtest=RandomGeneratorTest

  这里test参数的值是测试用例的类名

  mvn test -Dtest=Random*Test

  匹配零个或者多个字符,上述命令运行项目中所有类名以Random开头、Test结尾的测试类。

  mvn test-Dtest=RandomGeneratorTest, AccountCapchaServiceTest

  该test参数值是零个测试参数值是两个测试类名,他们之间用逗号分隔开,其效果就是告诉maven只运行这两个测试类。也可以结合使用星号和逗号。

  需要注意的是,上述几种从命令行动态指定测试类的方法都应该只是临时使用,如果长时间只运行项目的某几个测试,那么测试就会慢慢失去其本来的意义。

  test参数的值必须匹配一个或者多个测试类,如果maven-surefire-plugin找不到任何匹配的测试类,机会报错并导致构建失败。

 包含与排除测试用例

  Maven提倡约定由于配置原则,因此用户应该尽量遵守这一组模式来为测试类命名。即便如此,maven-surefire-plugin还是允许用户通过额外的配置来自定义

包含一些其他测试类,或者排除一些符合默认命名模式的测试类。

使用了**/*Test.java来匹配所有以Tests结尾的Java类,两个星号**用来匹配任意路径,一个星号*匹配除路径分割符外的0个或者多个字符。

  

使用exludes元素排除一些符合默认命名规则命名模式的测试类。

测试报告

  除了命令行输出,maven用户可以使用maven-surefire-plugin等插件以文件的形式生成更丰富的测试报告

基本的测试报告

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

  ->简单文本格式

  ->与JUnit兼容的xml格式

测试覆盖率报告

  测试覆盖率是衡量项目代码质量的一个重要的参考指标,Cobertura是一个优秀的开源测试覆盖率统计工具,maven通过cobertura-mavne-plugin与之集成,

用户可以使用简单的命令为Maven项目生成测试覆盖率报告:mvn cobertura:cobertura

  接着打开项目目录target/site/cobertura/下的index.html文件,就能看到如图所示的测试覆盖率报告。

  

单击具体的类,还能看到精确到行的覆盖率报告

Maven 学习总结 (四)之 测试的更多相关文章

  1. (转)Maven学习总结(四)——Maven核心概念

    孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(四)——Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Mav ...

  2. Maven学习(十四)-----Maven 构建配置文件

    Maven 构建配置文件 什么是构建配置文件? 生成配置文件是一组可以用来设置或覆盖 Maven 构建配置值的默认值.使用生成配置文件,你可以针对不同的环境,如:生产V/S开发环境自定义构建. 配置文 ...

  3. maven学习(四)——maven项目构建过程

    一.创建Maven项目 1.1.建立Hello项目 1.首先建立Hello项目,同时建立Maven约定的目录结构和pom.xml文件 Hello | --src | -----main | ----- ...

  4. Maven学习总结(四)——Maven核心概念--转载

    一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 ver ...

  5. Maven学习总结(四)——Maven核心概念——转载

    一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 ver ...

  6. 转】Maven学习总结(四)——Maven核心概念

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4051819.html 感谢! 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中 ...

  7. Maven学习总结(四)——Maven核心概念

    一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 ver ...

  8. Maven学习(四)-- Maven的核心概念

    摘自:http://www.cnblogs.com/xdp-gacl/p/4051819.html 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1. ...

  9. Maven学习(四)-- 生命周期和插件

    标签(空格分隔): 学习笔记 Maven生命周期是抽象的,不做任何实际的工作,在Maven的设计中,实际的任务都交由插件来完成. 每个构件步骤都可以绑定一个或者多个插件行为,而且Maven为大多数构建 ...

  10. maven学习(四)maven的生命周期

    官网:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html maven有三套相互独立的生命周期, ...

随机推荐

  1. JavaScript作用域链的理解

    前言 作用域是JavaScript一个很重要的概念,想要学好JavaScript就需要理解javascript作用域和作用域链的工作原理.这篇文章对JavaScript作用域链和作用域链做一个简单的介 ...

  2. Python爬虫【解析库之pyquery】

    该库跟jQuery的使用方法基本一样  http://pyquery.readthedocs.io/ 官方文档 解析库的安装 pip3 install pyquery 初始化 1.字符串初始化 htm ...

  3. linux命令之:yum

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  4. CentOS 6.5 minimal 安装配置VMware tools

    1.登录到系统,切换到root账户 2.配置网络 minimal版本默认不启动网络,所以要自己配置. 配置过程很简单,编辑配置文件 vi /etc/sysconfig/network-script/i ...

  5. Emit动态代理.NetCore迁移之旅

    [前言] 前面我们介绍了Aop 从静态代理到动态代理:https://www.cnblogs.com/7tiny/p/9657451.html 我们在.NetFramework平台下使用微软提供的Em ...

  6. Django组件 之 分页器(paginator)

    --------------------------------------------------------------------------------路虽远,行则将至.  事虽难,做则必成. ...

  7. VS2010创建MVC4项目提示错误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral,

    在安装VS2010时没有安装MVC4,于是后面自己下载安装了(居然还要安装VS2010 SP1补丁包).装完后新建MVC项目时却提示: 错误: 此模板尝试加载组件程序集 “NuGet.VisualSt ...

  8. java高级-动态注入替换类Instrumentation

    介绍 利用java.lang.instrument(容器类) 做动态 Instrumentation(执行容器) 是 Java SE 5 的新特性. 使用 Instrumentation,开发者可以构 ...

  9. Java JPA @Transient 在Hibernate中应用

    jpa @Transient - 走过程序员的路 - CSDN博客https://blog.csdn.net/lafengwnagzi/article/details/55511066 Hiberna ...

  10. mysql 解压版安装

    1.官网下载压缩包 2.解压 3.配置环境变量 添加系统环境变量  MYSQL_HOME 值为解压的主目录,例如     D:\mysql-5.7.25-winx64 修改Path 环境变量,点击编辑 ...