使用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. C#中@的作用

    1.在书写文件路径时,消除"/"的转义功能 string FileDirect = "C:\Text\Debug\Text.txt"; \\编译会报错 stri ...

  2. .NET Core跨平台部署

    目录 .NET Core跨平台部署 1. Windows-IIS 1.1 安装.NET Core Windows Server Hosting 1.2 配置应用程序池 1.3 使用发布文件 2 Lin ...

  3. Java11新特性!

    Java11又出新版本了,我还在Java8上停着.不过这也挡不住我对他的热爱,忍不住查看了一下他的新性能,由于自己知识有限,只总结了以下八个特性: 1.本地变量类型推断 什么是局部变量类型推断? va ...

  4. linux上修改mysql登陆密码

    1. 修改MySQL的登录设置: # vi /etc/my.cnf     2. 在[mysqld]的段中加上一句:skip-grant-tables  例如: [mysqld] port       ...

  5. How Cigna Tuned Its Spark Streaming App for Real-time Processing with Apache Kafka

    Explore the configuration changes that Cigna’s Big Data Analytics team has made to optimize the perf ...

  6. java8 Lambda表达式的新手上车指南(1)--基础语法和函数式接口

    背景 java9的一再推迟发布,似乎让我们恍然想起离发布java8已经过去了三年之久,java8应该算的上java语言在历代版本中变化最大的一个版本了,最大的新特性应该算得上是增加了lambda表达式 ...

  7. 想了解SAW,BAW,FBAR滤波器的原理?看这篇就够了!

    想了解SAW,BAW,FBAR滤波器的原理?看这篇就够了!   很多通信系统发展到某种程度都会有小型化的趋势.一方面小型化可以让系统更加轻便和有效,另一方面,日益发展的IC**技术可以用更低的成本生产 ...

  8. Golang 入门系列(五)GO语言中的面向对象

    前面讲了很多Go 语言的基础知识,包括go环境的安装,go语言的语法等,感兴趣的朋友可以先看看之前的文章.https://www.cnblogs.com/zhangweizhong/category/ ...

  9. python操作MONGODB数据库,提取部分数据再存储

    目标:从一个数据库中提取几个集合中的部分数据,组合起来一共一万条.几个集合,不足一千条数据的集合就全部提取,够一千条的就用一万减去不足一千的,再除以大于一千的集合个数,得到的值即为所需提取文档的个数. ...

  10. MacOS搭建本地服务器

    MacOS搭建本地服务器 一,需求分析 1.1,开发app(ios android)时通常需往app中切入web页面,直接导入不行,故需搭建本地的测试网站服务,通过IP嵌入访问页面. 1.2,开发小程 ...