Java 使用Maven Surefire插件批量运行单元测试

在基于Maven的Java项目中可以使用Maven 的 mvn test 命令来运行单元测试。

示例

有一个简单的Maven 项目, pom.xml 只导入了JUnit 5 的相关依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.osxm.test.javaut</groupId><artifactId>java-unittest</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><junit.jupiter.version>5.11.0</junit.jupiter.version><junit.platform.version>1.9.3</junit.platform.version></properties><dependencies>  <!-- JUnit Jupiter API for writing tests -->  <dependency>  <groupId>org.junit.jupiter</groupId>  <artifactId>junit-jupiter-api</artifactId>  <version>${junit.jupiter.version}</version>  <scope>test</scope>  </dependency>  <!-- JUnit Jupiter Engine for executing tests -->  <dependency>  <groupId>org.junit.jupiter</groupId>  <artifactId>junit-jupiter-engine</artifactId>  <version>${junit.jupiter.version}</version>  <scope>test</scope>  </dependency>  <!-- (Optional) Only required to run tests in an IDE   without built-in support for JUnit 5 -->  <dependency>  <groupId>org.junit.platform</groupId>  <artifactId>junit-platform-launcher</artifactId>  <version>${junit.platform.version}</version>  <scope>test</scope>  </dependency>  </dependencies>  </project>

这里有一个简单的斐波那契数列的函数:

/*** Copyright (C)  Oscar Chen(XM):* * Date: 2024-10-30* Author: XM*/package com.osxm.test.ut;public class Fibonacci {public static int fibonacci(int n) {if (n <= 1) {return n;}int a = 0, b = 1, c;for (int i = 2; i <= n; i++) {c = a + b;a = b;b = c;}return b;}
}

针对此数列,写了一个单元测试类:

/*** Copyright (C)  Oscar Chen(XM):* * Date: 2024-10-30* Author: XM*/package com.osxm.test.ut;import static org.junit.jupiter.api.Assertions.assertEquals;import org.junit.jupiter.api.Test;public class FibonacciTest {@Testpublic void testFibonacci_bound() {assertEquals(0, Fibonacci.fibonacci(0));assertEquals(1, Fibonacci.fibonacci(1));}@Testpublic void testFibonacci() {assertEquals(1, Fibonacci.fibonacci(2));  assertEquals(2, Fibonacci.fibonacci(3));  assertEquals(3, Fibonacci.fibonacci(4));  assertEquals(5, Fibonacci.fibonacci(5));  assertEquals(8, Fibonacci.fibonacci(6));  assertEquals(13, Fibonacci.fibonacci(7));  }
}

该测试类可以在IDE中直接运行, 以VS Code的运行为例,可以直接点击测试方法前面的按钮运行:

在这里插入图片描述

如果需要在命令行运行要怎么进行呢? 如果要批量运行测试怎么进行呢? 答案就是Maven 的命令 mvn test

运行的结果如下:

在这里插入图片描述

这里会显示成功、失败、错误和跳过的数量, 除了控制台显示,在target\surefire-reports 目录下还产生了 .txt 和 .xml 的统计文件, 内容类似:

在这里插入图片描述

是什么在运行单元测试呢?

在Maven中用于运行单元测试的插件称为 Maven Surefire。
Maven Surefire插件是一个用于执行Java单元测试的强大工具,它集成在Maven构建系统中,为开发人员提供了自动化测试执行、详细的测试结果报告以及灵活的配置选项。

Maven Surefire基本概念

Maven Surefire插件(maven-surefire-plugin)是Maven项目中的一个常用插件,主要用于在Maven构建生命周期的test阶段执行单元测试。它支持多种Java测试框架,如JUnit和TestNG,使得开发人员可以根据自己的需求选择合适的测试框架进行单元测试。

Maven Surefire主要特点

  1. 自动化测试执行:Maven Surefire插件可以在构建过程中自动执行测试,无需手动运行测试用例,从而提高了测试效率。
  2. 支持多种测试框架:该插件支持JUnit、TestNG等常见的Java测试框架,为开发人员提供了更多的选择。
  3. 并行执行测试:Maven Surefire插件支持并行执行测试用例,可以显著缩短测试时间,提高构建效率。
  4. 详细的测试结果报告:插件生成详细的测试结果报告,包括测试用例的执行结果、耗时、失败原因等信息,方便开发人员进行问题定位和分析。
  5. 灵活的配置选项:Maven Surefire插件提供了丰富的配置选项,可以根据项目需求进行定制,如指定要执行的测试类、排除某些测试类、设置超时时间等。

Maven Surefire使用方法

  1. 在pom.xml中配置插件

    • 首先,需要在项目的pom.xml文件中添加Maven Surefire插件的依赖配置。
    • 配置插件时,可以根据需要设置各种参数,例如测试源码路径、测试框架等。
  2. 运行测试用例

    • 通过在命令行中执行相应的Maven命令来运行测试用例。例如,使用“mvn test”命令可以运行项目中的所有单元测试。
    • 插件会自动扫描测试类目录下(默认为src/test/java/)的测试类,并执行符合命名约定的测试方法。

Maven Surefire配置示例

以下是一个简单的Maven Surefire插件配置示例:

<build>  <plugins>  <plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-surefire-plugin</artifactId>  <version>最新版本号</version>  <configuration>  <!-- 配置插件参数,如并行执行测试、指定测试类等 -->  <parallel>methods</parallel>  <threadCount>10</threadCount>  <!-- 其他配置参数 -->  </configuration>  </plugin>  </plugins>  
</build>

在配置中,可以根据需要设置并行执行测试的参数(如parallel和threadCount),以及其他自定义参数。

注意事项

  1. 版本兼容性:确保Maven Surefire插件的版本与Maven和测试框架的版本兼容。
  2. 测试类命名约定:默认情况下,Maven Surefire插件会自动执行测试源码路径下所有符合命名约定的测试类(如以Test开头或结尾的Java类)。如果需要自定义包含和排除模式,可以使用ant风格表达式或正则表达式进行配置。
  3. 跳过测试和忽略测试:在特定情况下,可能需要跳过测试或忽略某些测试。这可以通过在pom.xml中配置skipTests或testFailureIgnore参数来实现,也可以在测试方法上使用@Ignore注解来忽略单个测试。

Maven Surefire 需要配置吗?

maven-surefire-plugin是 Maven 的内置插件之一,用于执行单元测试。默认情况下,当你运行mvn test命令时,Maven 会自动使用maven-surefire-plugin来运行你的测试代码,而无需显式地在pom.xml文件中进行配置。

maven-surefire-plugin默认会查找项目中的测试类,这些测试类通常位于src/test/java目录下,并且类名应该以Test结尾(这是 JUnit 的命名约定,但 Maven 的插件实际上更灵活,可以通过配置来指定不同的命名模式)。

如果你没有为maven-surefire-plugin提供任何自定义配置,Maven 将使用插件的默认设置来运行测试。这包括:

  • 查找并运行所有符合命名约定的测试类。
  • 生成测试报告,通常位于target/surefire-reports目录下。
  • 根据测试结果生成构建的成功或失败状态。

然而,尽管默认配置通常足够,但有时候你可能需要自定义maven-surefire-plugin的行为。例如,你可能想要:

  • 排除某些测试类或方法。
  • 包含不符合默认命名约定的测试类。
  • 更改测试报告的格式或位置。
  • 设置并行执行测试以提高构建速度。
  • 配置其他与测试执行相关的选项。

在这些情况下,你可以在pom.xml文件中为maven-surefire-plugin提供自定义配置。例如:

<build>  <plugins>  <plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-surefire-plugin</artifactId>  <version>3.0.0-M5</version> <!-- 使用你需要的具体版本号 -->  <configuration>  <!-- 在这里添加你的自定义配置 -->  <includes>  <include>**/MySpecialTest.java</include>  </includes>  <excludes>  <exclude>**/SlowTest.java</exclude>  </excludes>  <parallel>methods</parallel> <!-- 并行执行测试方法 -->  <!-- 其他配置选项 -->  </configuration>  </plugin>  </plugins>  
</build>

总结

  • Maven中使用 mvn test 运行测试
  • Maven中用于运行单元测试的插件称为 Maven Surefire
  • Maven Surefire不需要显示配置, 如果需要进阶使用,可以进行配置


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

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

相关文章

Linux CentOS7下创建SFTP服务器

本文详细介绍了在Linux CentOS上部署安全文件传输协议&#xff08;SFTP&#xff09;服务器的全过程。SFTP基于SSH&#xff08;安全壳层协议&#xff09;提供文件传输服务&#xff0c;继承了SSH的安全特性&#xff0c;如数据加密、完整性验证和服务器认证等&#xff0c;确保数据…

电科金仓(人大金仓)更新授权文件(致命错误: XX000: License file expired.)

问题:电科金仓(人大金仓)数据库链接异常,重启失败,查看日志如下: 致命错误: XX000: License file expired. 位置: PostmasterMain, postmaster.c:725 解决方法: 一、下载授权文件 根据安装版本在官网下载授权文件(电科金仓-成为世界卓越的数据库产品与服务提供商)…

3D Gaussian Splatting代码详解(二):模型构建

3 模型构建 gaussians GaussianModel(dataset.sh_degree) 3.1 初始化函数 __init__ 构造函数 构造函数 __init__ 的主要作用是初始化 3D 高斯模型的各项参数和激活函数&#xff0c;用于生成 3D 空间中的高斯表示。 初始化球谐函数的参数&#xff1a; self.active_sh_degre…

一文讲明白大模型分布式逻辑(从GPU通信原语到Megatron、Deepspeed)

1. 背景介绍 如果你拿到了两台8卡A100的机器&#xff08;做梦&#xff09;&#xff0c;你的导师让你学习部署并且训练不同尺寸的大模型&#xff0c;并且写一个说明文档。你意识到&#xff0c;你最需要学习的就是关于分布式训练的知识&#xff0c;因为你可是第一次接触这么多卡…

Python毕业设计选题:基于协同过滤的校园音乐推荐系统小程序-django+uniapp

开发语言&#xff1a;Python框架&#xff1a;djangouniappPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录界面 管理员功能界面 用户管理 音乐信息管理 音乐类型管理 留言板管…

【python】OpenCV—findContours(4.4)

文章目录 1、功能描述2、代码实现3、完整代码4、结果展示5、涉及到的库函数6、参考 1、功能描述 找出物体轮廓&#xff0c;根据 PCA 计算特征值和特征向量&#xff0c;绘制特征值和特征向量&#xff0c;来初步展示物体的方向 2、代码实现 导入库函数&#xff0c;读入图片&am…

Jmeter实际应用

环境准备 JDK1.8Jmeter 5.6.3 下载地址Jmeter 插件 下载地址 放到lib/ext下 常用命令 # 启动 sh jmeter# 集群模式下启动节点&#xff0c;不启动用不了集群 sh jmeter-server#生成ssl需要的证书, 这里会要求输入个密码&#xff0c;是要在jmeter中用的 keytool -import -ali…

Javaweb 实验4 xml

我发现了有些人喜欢静静看博客不聊天呐&#xff0c; 但是ta会点赞。 这样的人呢帅气低调有内涵&#xff0c; 美丽大方很优雅。 说的就是你&#xff0c; 不用再怀疑哦 实验四 XML 目的&#xff1a; 安装和使用XML的开发环境认识XML的不同类型掌握XML文档的基本语法了解D…

C#界面设计--9--fatal error C1083: 无法打开包括文件:“jruparse.h”: No such file or directory

1、VS2008-编译时报错“fatal error C1083: 无法打开包括文件:“jruparse.h”: No such file or directory” 2、问题出现的原因及解决方法 1、如果要引入的这些,h文件跟.cpp在同一个目录下&#xff0c;就不会出现这种问题&#xff0c;检査在工程的include目录下是不是真的存…

【机器学习】 15. SVM 支撑向量机 support vector machine,拉格朗日,软边界,核函数

SVM 支撑向量机 support vector machine&#xff0c;拉格朗日&#xff0c;软边界&#xff0c;核函数 1. 超平面边界 margin of hyperplane2. 边界越大的超平面越好原因 3. 线性模型通过决策边界分类4. SVM的问题5. 拉格朗日乘子与SVM结合求最大边界6. SVM软边界和硬边界7. 非线…

SpringBoot获取resources目录下的文件

在 Spring Boot 项目中&#xff0c;获取 resources 目录中的文件路径通常涉及到访问类路径资源&#xff08;classpath resources&#xff09;。Spring Boot 提供了一些工具类和方法&#xff0c;可以方便地访问这些资源。以下是一些常见的方法&#xff1a; 首先&#xff0c;我们…

GitLab代码仓管理安装配置使用

Gitlab介绍 GitLab是一个基于Git的开源项目管理工具&#xff0c;它集成了版本控制、代码审查、持续集成&#xff08;CI&#xff09;/持续部署&#xff08;CD&#xff09;、自动化测试等多种功能&#xff0c;是一个完整的DevOps平台。以下是对GitLab的详细介绍&#xff1a; 一…

C#/WinForm 基于ffmpeg视频流转GIF

源码&#xff1a;https://gitee.com/feng-cai/screenshot-recording

Pinctrl子系统pinctrl_desc结构体进一步介绍

往期内容 本专栏往期内容&#xff1a; Pinctrl子系统和其主要结构体引入 input子系统专栏&#xff1a; 专栏地址&#xff1a;input子系统input角度&#xff1a;I2C触摸屏驱动分析和编写一个简单的I2C驱动程序 – 末片&#xff0c;有往期内容观看顺序 I2C子系统专栏&#xff1a;…

基于OSS搭建在线教育视频课程分享网站

OSS对象存储服务是海量、安全、低成本、高持久的存储服务。适合于存储大规模非结构化数据&#xff0c;如图片、视频、备份文件和容器/虚拟机镜像等。 安装nginx wget https://nginx.org/download/nginx-1.20.2.tar.gz yum -y install zlib zlib-devel gcc-c pcre-devel open…

研究轮腿运动学方案的看法

本文学习自电科中山柳同学的方案分享 遇到的问题&#xff1a; 1、轮毂输出力矩不足以配合腿部收敛机体姿态&#xff08;即腿部关节输出和轮毂输出都被LQR拉大了&#xff0c;但是轮毂最大力矩不够用了&#xff09; 可以引入MPC对LQR输出的反馈增益矩阵K 进行反向增益&#xf…

Linux学习_11

第十章管理Linux的联网 主要包括配置网络&#xff0c;通过域名访问主机&#xff0c;从网站瞎子啊文件&#xff0c;VMware三种网络模式 配置网络 概念 网络接口是指网络中的计算机或网络设备与其他设备实现通讯的进出口&#xff0c;一般是指计算机的网络接口即网卡设备 从RHEL7开…

VBto Converter是一款功能强大的工具,可让您快速轻松地将Microsoft Visual Basic 6.0项目转换

VBto Converter是一款功能强大的工具&#xff0c;可让您快速轻松地将Microsoft Visual Basic 6.0项目转换 1、简介2、官方网站3、本站下载&#xff08;已汉化&#xff09; 1、简介 VBto Converter V2.90 版本&#xff0c;是一款功能强大的工具&#xff0c;可让您快速轻松地将M…

巨好看的登录注册界面源码

展示效果 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthdevic…

突破挑战,创新前行 | 生信科技SOLIDWORKS 2025新品发布会·合肥站精彩回顾

2024年10月18日&#xff0c;由生信科技举办的首场SOLIDWORKS 2025新产品发布会在安徽合肥圆满落幕。现场邀请到制造业的专家学者们一同感受SOLIDWORKS 2025最新功能&#xff0c;探索制造业数字化转型之路。 合肥站活动日&#xff0c;由生信科技副总经理徐建开场。他以智造无界&…