当前位置: 首页 > article >正文

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 {

    @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.kler.cn/a/378453.html

相关文章:

  • 鸿蒙HarmonyOS开发:给应用添加基础类型通知和进度条类型通知(API 12)
  • SpringBoot新闻稿件管理系统:架构与实现
  • LeetCode:633. 平方数之和(Java)
  • Vscode使用launch.json进行传参调试代码
  • Fooocus图像生成软件本地部署教程:在Windows上快速上手AI创作
  • python 使用进程池并发执行 SQL 语句
  • 数据结构模拟题[九]
  • 使用DJL和PaddlePaddle的口罩检测详细指南
  • AI读教链文章《微策略的金融永动机 —— 十年之约#34(ROI 53%)》
  • HTML 基础标签——结构化标签<html>、<head>、<body>
  • unity3d————游戏对象随机位置移动
  • 力扣每日一题 3211. 生成不含相邻零的二进制字符串
  • 使用Conda环境为Jupyter添加内核
  • [HTML]-基础标记:列表/标题/引用/表格/嵌入网页/图片/视频等
  • 力扣题目解析--罗马数字转整型
  • 一次明白——Vue.js组件开发!
  • Kubernetes运行大数据组件-运行spark
  • element plus中修改el-table的样式
  • JAVA语言多态和动态语言实现原理
  • 深度学习:反向传播算法简介
  • 一体化运维监控管理平台详解:构建高效运维体系
  • 如何通过OpenAI Gym学习强化学习
  • 乡村景区一体化系统(门票,餐饮,便利店,果园,娱乐,停车收费
  • 两个壁面之间夹一个圆柱形杆的温度分布
  • LeetCode 684.冗余连接:拓扑排序+哈希表(O(n)) 或 并查集(O(nlog n)-O(nα(n)))
  • 使用GetX实现GetPage中间件