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

news2024/11/25 4:17:57

在基于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 {

    @Test
    public void testFibonacci_bound() {
        assertEquals(0, Fibonacci.fibonacci(0));
        assertEquals(1, Fibonacci.fibonacci(1));
    }

    @Test
    public 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.coloradmin.cn/o/2228765.html

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

相关文章

如何搭建题库管理小序❓

土著刷题小&#x1f34a;序不仅能够作为组织考试的利器&#xff0c;它同样可以帮助教育培训机构构建一个强大且高效的题库管理系统。 下面跟随我们的指导&#xff0c;一起来看看如何利用土著刷题小&#x1f34a;序轻松快捷地建立起自己的题库&#xff0c;并享受其所带来的诸多好…

ComfyUI - ComfyUI 工作流中集成 SAM2 + GroundingDINO 处理图像与视频 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/143359538 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 SAM2 与…

汽车免拆诊断案例 | 2010款起亚赛拉图车发动机转速表指针不动

故障现象  一辆2010款起亚赛拉图车&#xff0c;搭载G4ED 发动机&#xff0c;累计行驶里程约为17.2万km。车主反映&#xff0c;车辆行驶正常&#xff0c;但组合仪表上的发动机转速表指针始终不动。 故障诊断  接车后进行路试&#xff0c;车速表、燃油存量表及发动机冷却温度…

MFC界面开发组件Xtreme Toolkit Pro v24全新发布—完整的SVG支持

Codejock软件公司的Xtreme Toolkit Pro是屡获殊荣的VC界面库&#xff0c;是MFC开发中最全面界面控件套包&#xff0c;它提供了Windows开发所需要的11种主流的Visual C MFC控件&#xff0c;包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Repo…

基于Springboot+Vue的智慧社区数字治理平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 智慧社区作为智慧城市…

SpringMVC学习中遇到编码问题(过滤器)

一、准备 1、创建一个简单的spring项目&#xff0c;具体不多说&#xff0c;这里主要使用Java配置来搭建。 2、这里我们就只简单的添加两个主要的包&#xff08;若是想要其他的自己添加&#xff09; <dependency><groupId>org.springframework</groupId>&l…

搭建支持国密GmSSL的Nginx环境

准备 1、服务器准备&#xff1a;本文搭建使用的服务器是CentOS 7.6 2、安装包准备&#xff1a;需要GmSSL、国密Nginx&#xff0c;可通过互联网下载或者从 https://download.csdn.net/download/m0_46665077/89936158 下载国密GmSSL安装包和国密Nginx安装包。 服务器安装依赖包…

遥遥领先!手把手带你用国产香橙派部署清华AI语言模型,比肩GPT,树莓派做得到吗?

感谢 顾子韵 &#xff0c;Tass及其他朋友的帮助&#xff0c;缺少他们的帮助无法完成该教程。感兴趣的朋友私聊我或他进群一起学习。 省流中文版本 b站手把手教程&#xff0c;小伙伴们可以直接对着视频进行实践&#xff1a; 1.cd /root 来到root目录 2.apt update &&…

-XSS-

链接 https://github.com/do0dl3/xss-labs 搭建过程非常容易的 搭建好之后&#xff0c;就可以点击图片开始闯关了 第一关--JS弹窗函数alert() 显示payload的长度是4 level1.php?nametest level1.php?nametest1 发现只要改变name的值就显示什么在页面上 没有什么过滤的 …

忘记密码如何解除PPT的限制编辑?推荐两种方法!

当PPT文件设置了带密码的“只读方式”&#xff0c;文件的编辑权限就会受到限制。如果没有密码&#xff0c;就只能查看&#xff0c;而无法编辑修改PPT了。 那在忘记密码的情况下如何解除PPT的限制编辑呢&#xff1f;本文将介绍两种解除方法&#xff0c;帮助小伙伴们轻松编辑PPT…

R向量运算数组矩阵

向量的运算 向量的加减乘除可以直接进运行&#xff0c;不用循环 向量之间的运算&#xff1a;分别对应计算&#xff0c;不用循环 两个运算的向量可以不是长度相等&#xff0c;但是一定长度要成整数倍。 每种运算都可以返回逻辑值T或F 取整函数 保留小数位用round&#xff1a; …

微软官宣 GitHub Spark: 编程进入自然语言时代

今年的生活是那样悬而未决 悬置在好与烂之间&#xff0c;更偏烂一点 我没追求什么意义 我只是无所事事的来 这个世界度过了我的全部时间 我们都知道 AI 的发展可谓是一日千里&#xff0c;远超之前互联网的发展速度。在国际 AI 领域&#xff0c;微软&#xff0c;谷歌基本上已…

【成都新篇】龙信科技电子取证实验室,引领科技取证新时代

文章关键词&#xff1a;电子数据取证实验室、手机取证、介质取证、云取证、现场勘查、电子物证 在科技创新的浪潮中&#xff0c;龙信科技成都实验室以其卓越的电子数据取证服务&#xff0c;成为了中西部地区一颗璀璨的明珠。随着新址的搬迁&#xff0c;我们不仅扩大了业务范围…

.NET内网实战:通过白名单文件反序列化漏洞绕过UAC

01阅读须知 此文所节选自小报童《.NET 内网实战攻防》专栏&#xff0c;主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧&#xff0c;对内网和后渗透感兴趣的朋友们可以订阅该电子报刊&#xff0c;解锁更多的报刊内容。 02基本介绍 03原理分析 在渗透测试和红…

算法日记 13 day 二叉树

今天继续二叉树啊&#xff01;&#xff01;&#xff01; 题目&#xff1a;平衡二叉树 110. 平衡二叉树 - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 题目分析&#xff1a; 平衡二叉树指的是一个二叉树每个节点 的左右两个子树…

「C/C++」C/C++ 之 动态内存分配

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

人工智能_神经网络103_感知机_感知机工作原理_感知机具备学习能力_在学习过程中自我调整权重_优化效果_多元线性回归_逻辑回归---人工智能工作笔记0228

由于之前一直对神经网络不是特别清楚,尤其是对神经网络中的一些具体的概念,包括循环,神经网络卷积神经网络以及他们具体的作用,都是应用于什么方向不是特别清楚,所以现在我们来做教程来具体明确一下。 当然在机器学习之后还有深度学习,然后在深度学习中对各种神经网络的…

idea使用Translation插件实现翻译

1.打开idea&#xff0c;settings&#xff0c;选择plugins&#xff0c;搜索插件Translation&#xff0c;安装 2.选择翻译引擎 3.配置引擎&#xff0c;以有道词典为例 3.1 获取应用ID&#xff0c;应用秘钥 3.1.1 创建应用 点击进入有道智云控制台 3.1.2 复制ID和秘钥 3.2 idea设…

Mac下载 安装MIMIC-IV 3.0数据集

参考blog MIMIC IV 3.0数据库安装方法_mimic数据下载-CSDN博客 MIMIC IV数据库安装&#xff08;二&#xff09;_mimic数据库安装-CSDN博客 MIMIC-IV3.0安装_mimic iv 3.0-CSDN博客 MIMIC-IV-v2.0安装教程_mimic iv 安装教程-CSDN博客 MIMIC IV 3.0数据库安装方法或者思路&…

力扣——另一个的子树(C语言)

1.题目&#xff1a; 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree …