Maven的单元测试插件maven-surefire-plugin详解

文章目录

  • pom.xml 的配置(注意事项,非常重要)
  • 测试案例
  • 执行测试命令
  • surefire 插件配置

pom.xml 的配置(注意事项,非常重要)

1.必须引入 maven-surefire-plugin 插件,否则无法使用 Maven 的测试功能

2.maven-surefire-plugin 插件只支持 junit-jupiter-api 构件,不支持 junit 构件

所以在 pom.xml 文件关于测试的配置内容如下:

<dependencies><!-- 必须使用junit-jupiter-api构件,测试注解、断言都源于此构件--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.8.2</version><scope>test</scope></dependency></dependencies><build><pluginManagement><plugins><!-- 必须显式的声明测试插件,否则无法执行测试 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.0.0-M5</version></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.9</source><target>1.9</target><encoding>UTF-8</encoding></configuration></plugin></plugins></pluginManagement></build>

测试案例

如果要使用 Maven 的批量测试功能,只能把测试用例写在 src/test/java 目录下的源代码文件中。

首先在 src/main/java 下创建一个简单的被测试的类,类的代码如下:

public class HelloMaven {public int add(int a, int b) {return a + b;}public int subtract(int a, int b) {return a - b;}
}

接着在 src/test/java 目录下创建测试用例(即用于测试的类),代码如下:

package com.example.demo02;import org.junit.Assert;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;/*** description** @author liaowenxiong* @date 2022/1/28 08:18*/public class HelloMavenTest {private HelloMaven hm;@BeforeEachpublic void setUp() {hm = new HelloMaven();}@Testpublic void testAdd() throws InterruptedException {int a = 1;int b = 2;int result = hm.add(a, b);Assert.assertEquals(a + b, result);}@Testpublic void testSubtract() throws InterruptedException {int a = 1;int b = 2;int result = hm.subtract(a, b);Assert.assertEquals(a - b, result);}@AfterEachpublic void tearDown() throws Exception {System.out.println("测试结束了!");}
}

执行测试命令

测试用例写好之后,就要执行测试的命令,可以通过以下几种方式执行测试的命令。

第一种:命令终端

打开命令终端,切换到 pom.xml 所在目录下,执行命令 mvn test。执行命令 mvn test,表示执行到构件生命周期的 test 阶段,之前的阶段都会自动执行。执行 mvn test 命令的过程如下:

[~/Documents/IdeaProjects/struts2-demo01]$ mvn test
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------< priv.lwx.struts2:struts2-demo01 >-------------------
[INFO] Building struts2-demo01 Maven Webapp 1.0-SNAPSHOT
[INFO] --------------------------------[ war ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ struts2-demo01 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ struts2-demo01 ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ struts2-demo01 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/liaowenxiong/Documents/IdeaProjects/struts2-demo01/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ struts2-demo01 ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ struts2-demo01 ---
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running priv.lwx.struts2.util.ConnectionUtilsTest
配置文件路径:/Users/liaowenxiong/Documents/IdeaProjects/struts2-demo01/target/classes/db_config.properties
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
com.mysql.cj.jdbc.ConnectionImpl@221a3fa4
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.954 s - in priv.lwx.struts2.util.ConnectionUtilsTest
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.345 s
[INFO] Finished at: 2022-02-07T13:00:50+08:00
[I;NFO] ------------------------------------------------------------------------

第二种:Maven 操作窗口
选择生命周期的 test 阶段,点击上面的绿色三角图标。
在这里插入图片描述
第三种:Maven Goal 的窗口中执行
在这里插入图片描述
第四种:IDEA内置的命令终端窗口
在这里插入图片描述

这里要特别注意,如果只是执行命令 mvn surefire:test,那么之前的生命周期阶段是不会自动执行的,也就是说主代码不会被构建,测试代码也不会被构建,而是执行测试的指令,因为执行命令 mvn surefire:test 表示只执行 surefire 插件的 test 目标而已,执行命令过程如下:

[~/Documents/IdeaProjects/struts2-demo01]$ mvn surefire:test
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------< priv.lwx.struts2:struts2-demo01 >-------------------
[INFO] Building struts2-demo01 Maven Webapp 1.0-SNAPSHOT
[INFO] --------------------------------[ war ]---------------------------------
[INFO] 
[INFO] --- maven-surefire-plugin:2.22.1:test (default-cli) @ struts2-demo01 ---
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running priv.lwx.struts2.util.ConnectionUtilsTest
配置文件路径:/Users/liaowenxiong/Documents/IdeaProjects/struts2-demo01/target/classes/db_config.properties
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
com.mysql.cj.jdbc.ConnectionImpl@221a3fa4
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.855 s - in priv.lwx.struts2.util.ConnectionUtilsTest
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.477 s
[INFO] Finished at: 2022-02-07T12:54:54+08:00
[INFO] ------------------------------------------------------------------------

surefire 插件配置

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.0.0-M5</version><configuration><excludes><!-- 测试时排除指定的文件 --><exclude>**/TestConstants.java</exclude></excludes><!--  Maven运行测试用例时,是通过调用maven的surefire插件并fork一个子进程来执行用例的。forkmode属性中指明是要为每个测试创建一个进程,还是所有测试在同一个进程中完成。 forkMode 可设置值有 “never”, “once”, “always” 和 “pertest”。 never:不创建子进程once:在一个进程中进行所有测试。once为默认设置,在Hudson上持续回归时建议使用默认设置。 pretest: 每一个测试(测试用例/测试类)创建一个新进程,为每个测试创建新的JVM是单独测试的最彻底方式,但也是最慢的,不适合hudson上持续回归 always:在一个进程中并行的运行脚本(即测试方法),Junit4.7以上版本才可以使用,surefire的版本要在2.6以上提供这个功能,其中 threadCount:执行时,指定可分配的线程数量。只和参数parallel配合使用有效。默认:5。 --><forkMode>always</forkMode><parallel>methods</parallel><threadCount>4</threadCount></configuration>
</plugin>

补充:
The parameter forkMode is deprecated since version 2.14. Use forkCount and reuseForks instead.
在 2.14 版本之后,forkMode 不再使用,改成 forkCount 或者 reuseForks。

forkCount:选项指定并行分叉以执行测试的VM数量。当以“C”终止时,数字部分乘以CPU核数。浮点值只能与“C”一起接受。如果设置为“0”,则不会分叉任何VM,所有测试都在主进程内执行。

<forkCount>4</forkCount>
<forkCount>1.5C</forkCount>

reuseForks:指示是否可以重用分叉的VM。如果设置为“false”,则为每个要执行的测试类派生一个新的VM。如果设置为“true”,则最多会对forkCount虚拟机进行分叉,然后重新使用以执行所有测试。

<reuseForks>true</reuseForks> 
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.0.0-M5</version><configuration><reuseForks>true</reuseForks><forkCount>4</forkCount></configuration>
</plugin>

参见:https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#forkCount

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql启动命令 windows_Windows下Nginx的启动停止等基本操作命令详解

在Windows下使用Nginx&#xff0c;我们需要掌握一些基本的操作命令&#xff0c;比如&#xff1a;启动、停止Nginx服务&#xff0c;重新载入Nginx等&#xff0c;下面我就进行一些简单的介绍。1、启动&#xff1a;C:serverginx-1.0.2>start nginx或C:serverginx-1.0.2>ngin…

警告提示:No archetype found in remote catalog. Archetype not found in any catalog

IDEA 使用 archetype&#xff08;原型/模板/骨架&#xff09;创建 Maven 项目时&#xff0c; 最后提示&#xff1a; No archetype found in remote catalog. Defaulting to internal catalog Archetype not found in any catalog. Falling back to central repository. Add a…

python存数据到excel_python爬取的数据--保存数据到excel

在这里用到的是xlwt import xlwt 如果还未安装此模块&#xff0c;可以执行下面的命令安装&#xff1a; pip install xlwt 接下来就是将数据列表存储到excel当中&#xff1a; def save_to_excel(): try: workbook xlwt.Workbook(encodingutf-8) sheet workbook.add_sheet(taob…

vm 安装jdk1.8_JDK 13:VM.events已添加到jcmd

vm 安装jdk1.8CSR&#xff08; 兼容性和规范审查 &#xff09; JDK-8224601 [“提供VM.events诊断命令”]从JDK 13 Early Access Build &#xff03;24 &#xff08;日期为2019/6/6 &#xff09;开始在JDK 13中实现&#xff0c;并通过增强功能JDK- 8224600 [“提供VM.events命令…

macos big sur正式版_苹果macOS Big Sur正式版发布

苹果macOS Big Sur正式版发布&#xff1a;支持M1原生运行iOS应用苹果macOS Big Sur正式发布并开放下载&#xff0c;版本号为macOS 11.0.1(20B29)苹果近期刚发布了搭载M1芯片的Mac mini、MacBook Air和MacBook Pro新机型&#xff0c;预装了全新的macOS Big Sur苹果表示&#xff…

Maven如何生成可执行的jar文件

参考1&#xff1a;https://juejin.cn/post/6844903622430425095 参考2&#xff1a;http://xxgblog.com/2015/08/07/maven-create-executable-jar/ 参考3&#xff1a;https://www.cnblogs.com/justinzhang/p/4975727.html 参考4&#xff1a;https://www.cnblogs.com/hafiz/p/653…

java中qrcode_如何在Java中使用QRGen创建QRCode

java中qrcode在我以前的一篇文章中 &#xff0c;我们了解了如何使用Zxing Java库创建QRCode及其等效的SVG。 Zxing库不再得到积极维护&#xff0c;为此&#xff0c;Zxing库周围有一个名为QRGen的包装&#xff0c;该包装提供了更高级别的API和用于生成QR代码的构建器语法。 在本…

java list有序还是无序_最详细的Java学习点知识脑图,从基础到进阶,看完还有啥你不懂的...

欢迎关注专栏《Java架构筑基》——专注于Java技术的研究与分享&#xff01;Java架构筑基​zhuanlan.zhihu.comJava架构筑基——专注于Java技术的研究与分享&#xff01;后续文章将首发此专栏&#xff01;欢迎各位Java工程师朋友投稿和关注# 链接 Java程序员福利"常用资料分…

Maven的构件坐标(GAV)

groupld 定义了项目属于哪个组&#xff0c;这个组往往和项目所在的组织或公司存在关联。譬如在 googlecode 上建立了一个名为 myapp 的项目&#xff0c;那么 groupld 就应该是 com.googlecode.myapp&#xff0c;如果你的公司是 htlwk&#xff0c;有一个项目为qpw&#xff0c;那…

rails jquery_Spring与Rails的jQuery UJS

rails jquery我一直想尝试一下是否可以在Spring Boot项目中使用Rails的jQuery UJS 。 jquery-ujs中的UJS代表简洁的JavaScript 。 我非常喜欢UJS如何将事件处理程序连接到标记有HTML5 data-*属性的合格DOM元素。 我发现自己希望看到更多在Spring Boot Web应用程序中使用的这种方…

python读word文档doc公文标题_python – 从word doc中提取标题文本

我试图从MS Word文档(.docx文件)中的标题(任何级别)中提取文本.目前我正在尝试使用python-docx来解决,但不幸的是我仍然无法弄清楚它是否在阅读之后是否可行(也许我错了). 我试图在线寻找解决方案,但没有发现我的任务特定.如果有人可以在这里指导我,那将是很棒的. 解决方法: 基…

序列化和反序列化的学习

文章目录序列化构造方法方法使用步骤反序列化构造方法方法使用步骤序列化 把内存中的对象以流的方式写入到文件中&#xff0c;这叫序列化&#xff0c;也叫“写对象” 使用 ObjectOutputStream 写入对象中的数据&#xff0c;这个流叫对象字节输出流&#xff0c;也叫对象的序列化…

java开发展望怎么写_Java开发趋势:2019年展望

java开发展望怎么写在这篇文章中&#xff0c;我们将发表一篇有关2019年Java开发趋势的综合文章。您是否知道Java自上世纪问世以来&#xff0c;现在已在100亿个设备上运行 &#xff1f; 它是数十年来最受欢迎的编码语言&#xff0c;但是在最近几个月中&#xff0c;Java经历了一些…

dml语句包括哪些_MySQL数据操作(DML)语句,入门掌握这些足够了

DML是(Data Manipulation Languages)数据定义语言的缩写主要包括表记录的插入insert、更新update、删除select插入记录insert into table(field1,field2,...fieldn) values(value1,value2,...value)如&#xff1a;向表 emp 中插入以下记录:---------------------------| ename …

Servlet 的实例对象

Servlet 实例是由 Servlet 容器自动创建&#xff0c;也可以说是由 Web Server 创建的。 当请求到达服务器的时候&#xff0c;或者在 web.xml 中配置了 init 方法的时候&#xff0c;容器就会自动创建 Servlet 实例。 如果在 web.xml 中配置了 init 方法&#xff0c;那么启动服…

java 手动装箱拆箱对象_将旧对象装箱可自动关闭

java 手动装箱拆箱对象从Java 7开始&#xff0c;我们可以使用try-with-resources并自动关闭任何实现Autocloseable接口的对象。 如果资源是 Autocloseable 。 一些类需要一些总结&#xff0c;但不是Autocloseable 。 这些主要是某些遗留框架中的旧类&#xff0c;仍然妨碍我们前…

delphi查看源码版本_[Mybatis]-IDEA导入Mybatis源码

该系列文章针对 Mybatis 3.5.1 版本一、下载 Mybatis 源码step1、下载 Mybatis-3.5.1 源码Mybatis 源码仓库地址下载版本信息如下&#xff1a;下载后进行解压&#xff0c;并打开 pom 文件&#xff0c;查看pom 中的父级依赖&#xff0c;如下&#xff1a;根据上述版本信息&#x…

Struts项目中,检测用户名是否被占用/查询账户名称是否被占用/查询账户名称是否已被注册/检查用户名是否被注册

在客户端无法检测注册用户名是否被占用&#xff0c;这需要查询数据库&#xff0c;所以是服务器端负责这块。 实现思路大致描述&#xff1a; 注册表单中添加自动检测用户名是否被占用的功能&#xff0c;其实就是利用 ajax 向服务器发送请求&#xff0c;并带着用户输入的用户名过…

羽毛球双打区域_测试双打简介

羽毛球双打区域当您编写单元测试时&#xff0c;您会遇到许多协作者&#xff0c;而且他们都有非常特殊的行为&#xff0c;知道在正确的时间必须使用哪种测试两倍可以使您的生活更轻松。 假 第一个是Dummy对象&#xff0c;它是最简单的一个&#xff0c;Dummy只是您为满足构造函数…

可为空的对象必须具有一个值_前端:这里有8个常见的JavaScript经典问题,总有一个你不会的...

参考前端小智&#xff1a;https://juejin.im/post/5d2d146bf265da1b9163c5c91.了解函数提升使用var关键字声明的变量在JavaScript中会被提升&#xff0c;并在内存中分配值undefined。 但初始化恰发生在你给变量赋值的地方。 另外&#xff0c;var声明的变量是函数作用域的&#…