Maven 学习总结 (四)之 测试
使用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 学习总结 (四)之 测试的更多相关文章
- (转)Maven学习总结(四)——Maven核心概念
孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(四)——Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Mav ...
- Maven学习(十四)-----Maven 构建配置文件
Maven 构建配置文件 什么是构建配置文件? 生成配置文件是一组可以用来设置或覆盖 Maven 构建配置值的默认值.使用生成配置文件,你可以针对不同的环境,如:生产V/S开发环境自定义构建. 配置文 ...
- maven学习(四)——maven项目构建过程
一.创建Maven项目 1.1.建立Hello项目 1.首先建立Hello项目,同时建立Maven约定的目录结构和pom.xml文件 Hello | --src | -----main | ----- ...
- Maven学习总结(四)——Maven核心概念--转载
一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 ver ...
- Maven学习总结(四)——Maven核心概念——转载
一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 ver ...
- 转】Maven学习总结(四)——Maven核心概念
原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4051819.html 感谢! 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中 ...
- Maven学习总结(四)——Maven核心概念
一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 ver ...
- Maven学习(四)-- Maven的核心概念
摘自:http://www.cnblogs.com/xdp-gacl/p/4051819.html 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1. ...
- Maven学习(四)-- 生命周期和插件
标签(空格分隔): 学习笔记 Maven生命周期是抽象的,不做任何实际的工作,在Maven的设计中,实际的任务都交由插件来完成. 每个构件步骤都可以绑定一个或者多个插件行为,而且Maven为大多数构建 ...
- maven学习(四)maven的生命周期
官网:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html maven有三套相互独立的生命周期, ...
随机推荐
- JavaScript作用域链的理解
前言 作用域是JavaScript一个很重要的概念,想要学好JavaScript就需要理解javascript作用域和作用域链的工作原理.这篇文章对JavaScript作用域链和作用域链做一个简单的介 ...
- Python爬虫【解析库之pyquery】
该库跟jQuery的使用方法基本一样 http://pyquery.readthedocs.io/ 官方文档 解析库的安装 pip3 install pyquery 初始化 1.字符串初始化 htm ...
- linux命令之:yum
yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...
- CentOS 6.5 minimal 安装配置VMware tools
1.登录到系统,切换到root账户 2.配置网络 minimal版本默认不启动网络,所以要自己配置. 配置过程很简单,编辑配置文件 vi /etc/sysconfig/network-script/i ...
- Emit动态代理.NetCore迁移之旅
[前言] 前面我们介绍了Aop 从静态代理到动态代理:https://www.cnblogs.com/7tiny/p/9657451.html 我们在.NetFramework平台下使用微软提供的Em ...
- Django组件 之 分页器(paginator)
--------------------------------------------------------------------------------路虽远,行则将至. 事虽难,做则必成. ...
- VS2010创建MVC4项目提示错误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral,
在安装VS2010时没有安装MVC4,于是后面自己下载安装了(居然还要安装VS2010 SP1补丁包).装完后新建MVC项目时却提示: 错误: 此模板尝试加载组件程序集 “NuGet.VisualSt ...
- java高级-动态注入替换类Instrumentation
介绍 利用java.lang.instrument(容器类) 做动态 Instrumentation(执行容器) 是 Java SE 5 的新特性. 使用 Instrumentation,开发者可以构 ...
- Java JPA @Transient 在Hibernate中应用
jpa @Transient - 走过程序员的路 - CSDN博客https://blog.csdn.net/lafengwnagzi/article/details/55511066 Hiberna ...
- mysql 解压版安装
1.官网下载压缩包 2.解压 3.配置环境变量 添加系统环境变量 MYSQL_HOME 值为解压的主目录,例如 D:\mysql-5.7.25-winx64 修改Path 环境变量,点击编辑 ...