Java世界的主流测试框架是JUnit和TestNG,Maven在构建执行到特定生命周期阶段的时候,通过插件执行JUnit和TestNG的测试用例。

Maven执行测试的插件是maven-surefire-plugin,即测试运行器(Test Runner)。

1. maven-surefire-plugin

1.1 扫描规则

maven-surefire-plugin默认的在测试源码目录(src/test/java)扫描测试类的规则是:

  1. 任何以Test开头的类
  2. 任何以Test结尾的类
  3. 任何以TestCase结尾的类

1.2 包含和排除测试

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>x.x.x</version>
<configuration>
<includes>
<include>**/*Tests</include> <!-- 包括所有以Tests为后缀的类 -->
</includes>
<excludes>
<exclude>**/*TempDaoTests</exclude> <!-- 排除所有以TempDaoTests为后缀的类 -->
</excludes>
</configuration>
<plugin>

1.3 动态指定测试目标

# 动态指定执行YourTargetTests类的测试
mvn test -Dtest=YourTargetTests # 动态指定执行以Your开头,以Tests结尾的所有测试类
mvn test -Dtest=Your*Tests # 使用逗号分隔多个待执行的测试类
mvn test -Dtest=YourTargetTests,My*Test

1.4 跳过测试

1.4.1 Maven命令参数

  1. -DskipTests只跳过测试执行,不跳过测试编译;
  2. -Dmaven.test.skip=true同时跳过测试的运行和测试编译。
  3. -Dtest -DfailIfNoTests=false,不指定测试类,同时抑制没有测试类时的报错,相当于一种跳过测试的方法。

1.4.2 插件配置

  • 跳过测试执行阶段
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>x.x.x</version>
<configuration>
<skipTests>true<skipTests>
</configuration>
<plugin>
  • 同时跳过测试编译和测试执行
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>x.x.x</version>
<configuration>
<skipTests>true<skipTests>
</configuration>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>x.x.x</version>
<configuration>
<skipTests>true<skipTests>
</configuration>
<plugin>

1.5 测试报告

maven-surefire-plugin插件在项目的target/surefire-reports目录生成:

  • 简单文本报告(TXT)
  • 详细报告(XML)

1.5.1 简单文本格式

内容包括:

  • 总测试用例数
  • 失败个数(执行结果与预期不符)
  • 出错个数(执行过程中发生了非预期的异常)
  • 跳过个数
  • 执行测试总耗时

1.5.2 详细报告

Eclipse等IDE的JUnit插件,集成了可视化阅读详细报告XML文件的功能。

2. cobertura-maven-plugin与测试覆盖率报告。

2.1 常用命令

mvn cobertura:cobertura

2.2 覆盖率报告

覆盖率报告生成在项目的target/site/cobertura目录,点击其中的index.html即可查看所有的覆盖率信息。

3 maven-jar-plugin插件与测试代码重用

maven-jar-plugin插件有两个目标,分别是jartest-jar.

  • jar内置绑定在default生命周期的package阶段
  • test-jar没有内置绑定,如果开发者需要打包测试代码,需要显式绑定,一旦显式绑定,其默认的绑定生命周期阶段是package
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>x.x.x</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
<goals>
<execution>
</executions>
<plugin>

这样,执行mvn package时就会将测试代码一同构建到目标Jar中,如果被打包的测试代码中提供了一些测试工具类,就可以供上层代码使用了。

Maven专题4——Maven测试的更多相关文章

  1. 构建简单的Maven工程,使用测试驱动的方式开发项目

    构建简单的Maven工程很简单,这里写这篇随笔的原因是希望自己能记住几个小点. 一.安装Maven 1.下载maven:https://maven.apache.org/download.cgi 2. ...

  2. eclipse使用maven打包时去掉测试类

    eclipse使用maven打包时去掉测试类 在pom.xml文件中增加如下配置: <plugin> <groupId>org.apache.maven.plugins< ...

  3. Maven取消编译自动测试

    Maven取消编译自动测试 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins&l ...

  4. Maven 专题(四):什么是Maven

    1 Maven 简介 Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和 依赖管理.Maven 这个单词的本意是:专家,内行.读音是['meɪ ...

  5. Maven 专题

    目录: Maven的安装 Eclipse安装Maven插件 Nexus私服搭建 Maven+Nexus配置 发布自己的构件(至Nexus) 创建maven多模块工程group 整理中[...] 先放一 ...

  6. Maven 专题(八):配置(一)常用修改配置

    修改配置文件 通常我们需要修改解压目录下conf/settings.xml文件,这样可以更好的适合我们的使用. 此处注意:所有的修改一定要在注释标签外面,不然修改无效.Maven很多标签都是给的例子, ...

  7. Maven 专题(三):为什么要用Maven

    1 真的需要吗? Maven 是干什么用的?这是很多同学在刚开始接触 Maven 时最大的问题.之所以会提出这个问题, 是因为即使不使用 Maven 我们仍然可以进行 B/S 结构项目的开发.从表述层 ...

  8. maven之一:maven安装和eclipse集成

    maven作为一个项目构建工具,在开发的过程中很受欢迎,可以帮助管理项目中的bao依赖问题,另外它的很多功能都极大的减少了开发的难度,下面来介绍maven的安装及与eclipse的集成. maven的 ...

  9. maven系列之一maven安装和与IDE集成

    第一部分:maven的基本信息和安装,配置  maven是一个项目构建和管理的工具,提供了帮助管理 构建.文档.报告.依赖.scms.发布.分发的方法.可以方便的编译代码.进行依赖管理.管理二进制库等 ...

随机推荐

  1. 【笔记】集成学习入门之soft voting classifier和hard voting classifier

    集成学习入门之soft voting classifier和hard voting classifier 集成学习 通过构建并结合多个学习器来完成学习任务,一般是先产生一组"个体学习器&qu ...

  2. Qt项目简易开发原理及常见问题解决

    一.资源下载地址 https://www.aliyundrive.com/s/jBU2wBS8poH 本项目路径:项目->免费->QtDev 注释:为了方便qt全功能开发,QtDev中包含 ...

  3. Python 应用爬虫下载酷狗音乐

    应用爬虫下载酷狗音乐 首先我们需要进入到这个界面 想要爬取这些歌曲链接,然而这个是一个假的网站,虽然单机右键进行检查能看到这些歌曲的链接,可进行爬取时,却爬取不到这些信息. 这个时候我们就应该换一种思 ...

  4. DVWA靶场之Command Injection(命令行注入)通关

    Command Injection Low: <?php if( isset( $_POST[ 'Submit' ]  ) ) { // Get input $target = $_REQUES ...

  5. python关于多级包之间的引用问题

    首先得明确包和模块. 包:在一个目录下存在__init__.py,那么该目录就是一个包. 模块:一个.py文件就是一个模块. 我们可以通过from 包 import 模块来引入python文件, 也可 ...

  6. java批量下载文件为zip包

    批量下载文件为zip包的工具类 package com.meeno.trainsys.util; import javax.servlet.http.HttpServletRequest; impor ...

  7. 什么是TCP,什么是UDP,它们两者的区别? 三次握手

    TCP: 定义: TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义. TCP编程的 ...

  8. 本文详细阐述如何用C#创建COM组件,并能用VC6.0等调用。

    本文详细阐述如何用C#创建COM组件,并能用VC6.0等调用. 附:本文适用任何VS系列工具. 在用C#创建COM组件时,一定要记住以下几点: 1.所要导出的类必须为公有: 2.所有属性.方法也必须为 ...

  9. 【mysql】用户和权限管理

    1.用户管理 相关命令如下 命令 描述 备注 create user zhang3 identified by '123123'; 创建名称为zhang3 的用户,密码设为123123:   sele ...

  10. 14.SpringMVC之文件上传下载

    SpringMVC通过MultipartResolver(多部件解析器)对象实现对文件上传的支持. MultipartResolver是一个接口对象,需要通过它的实现类CommonsMultipart ...