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有三套相互独立的生命周期, ...
随机推荐
- Linux shell编写脚本部署pxe网络装机
Linux shell编写脚本部署pxe网络装机 人工安装配置,Linux PXE无人值守网络装机 https://www.cnblogs.com/yuzly/p/10582254.html 脚本实 ...
- mas录屏,带系统声音和麦克风声音
自带的QuickTime + Soundflower 可完美解决,同时录系统的声音和mic声音,也可以只录系统声音. 安装Soundflower 在应用程序 -> 实用工具,里面找到“音频 MI ...
- netstat简介
netstat是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表,实际的网络连接以及每一个网络接口设备的状态信息,netstat用于显示与IP,TCP,UDP和ICMP协议相关的统计数据,一 ...
- LeetCode算法题-Find Mode in Binary Search Tree(Java实现)
这是悦乐书的第246次更新,第259篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第113题(顺位题号是501).给定具有重复项的二叉搜索树(BST),找到给定BST中的 ...
- RabbitMQ广播:direct模式
一. 消息的广播需要exchange:exchange是一个转发器,其实把消息发给RabbitMQ里的exchange fanout: 所有bind到此exchange的queue都可以接收消息,广播 ...
- 多线程中的event,用于多线程的协调
''' 简单的需求:红绿灯,红灯停,绿灯行 一个线程扮演红绿灯,每过一段时间灯变化,3-5个线程扮演车,红灯停,绿灯行 红绿灯线程和车的线程会相互依赖 这种场景怎么实现?---事件 切换一次灯就是一次 ...
- springboot mybatis搭建
非常easy直接写,没有搭建成分 1.目录 2. @RestController public class UserController { @RequestMapping("/hello& ...
- Ajax概述和判断用户名是否存在的简单代码练习
在本代码中主要体现,Ajax实现了部分位置的刷新.不需要重新刷新网页,重新请求服务器.下面用过代码来对Ajax更深的认识 这里需要创建,一个jsp文件(显示登录界面),js文件(对Ajax的主要设置) ...
- centos7下kubernetes(12。kubernetes-service)
Service:定义了一个服务得访问入口地址,前端的应用通过这个入口地址访问其背后得一组由pod副本组成的集群实例: service与后端的pod副本集群之间则是通过label selector来实现 ...
- odoo中def init(self):
# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. f ...