Junit单元测试基础

news2024/11/25 21:40:23

目录

配置xml文件,注入依赖 

常用注释

1.@Test

2.@BeforeAll和@AfterAll

3.@BeforeEach和@AfterEach

4.@TestMethodOrder

参数化

1.单参数

2.多参数

3.通过方法生成参数

测试用例执行管理


JUnit 是一个流行的 Java 单元测试框架,它为开发者提供了一种简单而有效的方式来编写和执行单元测试。

JUnit 5 是最新版本,也称为 JUnit Jupiter,它引入了许多新特性,如参数化测试、条件测试、扩展模型等,以及更强大的断言方法和注解。

JUnit 可以与许多集成开发环境(IDE)和构建工具(如 Eclipse、IntelliJ IDEA、Maven、Gradle 等)无缝集成,使得测试编写、运行和调试变得更加方便和高效。

配置xml文件,注入依赖 

 <!-- JUnit Jupiter API 依赖 -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- JUnit Jupiter 引擎依赖 -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- JUnit Platform 引擎依赖 -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>

注:创建的SpringBoot项目不需要引入依赖,直接使用junit注释即可。

常用注释

1.@Test

@Test是 JUnit 框架中的一个注解,用于标识一个方法是一个测试方法。JUnit 框架会在运行测试时自动识别被@Test注解标记的方法,并执行这些方法中的测试代码。@Test注解可以直接用于方法上。

2.@BeforeAll和@AfterAll

@BeforeAll和@AfterAll是 JUnit 框架中的生命周期注解,用于执行在所有测试方法执行之前和之后的操作。它们通常用于执行一次性的设置或清理操作,例如启动或关闭测试环境、连接或关闭数据库等。

public class MyTest {

    @BeforeAll
    public static void setUp() {
        // 在所有测试方法执行之前执行的代码
        System.out.println("Before all tests");
    }

    @AfterAll
    public static void tearDown() {
        // 在所有测试方法执行之后执行的代码
        System.out.println("After all tests");
    }

    @Test
    public void testMethod1() {
        // 测试方法1
    }

    @Test
    public void testMethod2() {
        // 测试方法2
    }
}

3.@BeforeEach和@AfterEach

 @BeforeEach和@AfterEach是 JUnit 框架中的生命周期钩子注解,用于在每个测试方法执行前和执行后执行特定的操作。它们通常用于执行一些准备工作或清理工作,以确保测试方法的独立性。

public class MyTest {

    @BeforeEach
    public void setUp() {
        // 在每个测试方法执行之前执行的代码
        System.out.println("Before each test");
    }

    @AfterEach
    public void tearDown() {
        // 在每个测试方法执行之后执行的代码
        System.out.println("After each test");
    }

    @Test
    public void testMethod1() {
        // 测试方法1
    }

    @Test
    public void testMethod2() {
        // 测试方法2
    }
}

4.@TestMethodOrder

通过@TestMethodOrder注解,可以指定测试方法的执行顺序。它可以与 OrderAnnotation.classAlphanumeric.classRandom.class 结合使用,以决定测试方法的执行顺序。这些选项分别表示按照注解顺序、按照字母数字顺序或者随机顺序执行测试方法。

//这行不能省略
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class OrderedTests {

    @Test
    @Order(1)
    public void testMethod1() {
        // 测试方法1
    }

    @Test
    @Order(2)
    public void testMethod2() {
        // 测试方法2
    }

    @Test
    @Order(3)
    public void testMethod3() {
        // 测试方法3
    }
}

参数化

注意:参数化注释上方不用写@Test注释

1.单参数

单参数只能接收一种类型的参数

@ParameterizedTest用于指定参数化测试方法。参数化测试是一种测试技术,允许通过使用不同的参数多次运行同一个测试方法,以覆盖不同的测试场景。

@ParameterizedTest注解通常与@ValueSource注解一起使用实现单参数

使用@ValueSource注解提供了整数类型的参数{1,2,3}。测试方法会分别以这些参数执行多次。

public class ParameterizedTests {

    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3})
    public void testMethod(int value) {
        // 使用传入的参数执行测试方法
        // 可以在这里编写针对不同参数进行的测试逻辑
    }
}

2.多参数

@ParameterizedTest注解通常与@CsvSource注解一起使用实现多参数。允许使用 CSV(逗号分隔值)格式提供测试方法的参数。每行 CSV 数据都会被解析为测试方法的一个参数集。

public class CsvSourceExample {

    @ParameterizedTest
    @CsvSource({
        "apple, 1",
        "banana, 2",
        "orange, 3"
    })
    public void testFruits(String fruit, int quantity) {
        // 测试逻辑
        System.out.println("Fruit: " + fruit + ", Quantity: " + quantity);
    }
}

使用 @CsvFileSource 注解读取 CSV 文件并将数据传递给参数化测试方法

    @ParameterizedTest
    @CsvFileSource(resources="test01.csv")
    void Test01(String name,int age){
        System.out.println("name: "+name+",age "+age);
    }
}

3.通过方法生成参数

@ParameterizedTest注解通常与@MethodSource注解一起使用实现通过方法生成参数

  public static Stream<Arguments> Generate() {
        return Stream.of(Arguments.arguments("张三", 13), Arguments.arguments("lisi", 14));
    }
    @ParameterizedTest
    @MethodSource("Generate")
    void Test02(String name,int age){
        System.out.println(name+" "+age);
    }

测试用例执行管理

@Suite
//通过class运行测试用例
@SelectClasses({TestClass1.class, TestClass2.class})
public class MyTestSuite {
    // 包含要执行的测试类

}

@Suite
//通过包运行测试用例
@SelectPackages("com.example.tests")
public class MyTestSuite {
    // 包含要执行的测试包中的所有测试类
}

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

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

相关文章

题目 2694: 蓝桥杯2022年第十三届决赛真题-最大数字【暴力解法】

最大数字 原题链接 &#x1f970;提交结果 思路 对于每一位&#xff0c;我我们都要尽力到达 9 所以我们去遍历每一位, 如果是 9 直接跳过这一位 如果可以上调到 9 我们将这一位上调到 9 &#xff0c;并且在a 中减去对应的次数 同样的&#xff0c;如果可以下调到 9&#xff0c;我…

参数仅有0.049M!基于Mamba的医学图像分割新SOTA来了!

目前&#xff0c;基于CNN和Transformer的医学图像分割面临着许多挑战。比如CNN在长距离建模能力上存在不足&#xff0c;而Transformer则受到其二次计算复杂度的制约。 相比之下&#xff0c;Mamba的设计允许模型在保持线性计算复杂度的同时&#xff0c;仍然能够捕捉到长距离的依…

【AIGC】训练数据入库(Milvus)

之前的文章有写如何获取数据、如何补充数据&#xff0c;也有说如何对数据进行清洗、如何使用结构化数据进行训练。但好像没有说如何将训练数据“入库”。这里说的入库不是指 MySQL 数据库&#xff0c;而是指向量检索库 Milvus。 众所周知&#xff0c;人工智能多用向量数据进行…

人民网至顶科技:《开启智能新时代:2024中国AI大模型产业发展报告发布》

3月26日&#xff0c;人民网财经研究院与至顶科技联合发布《开启智能新时代&#xff1a;2024年中国AI大模型产业发展报告》。该报告针对AI大模型产业发展背景、产业发展现状、典型案例、挑战及未来趋势等方面进行了系统全面的梳理&#xff0c;为政府部门、行业从业者以及社会公众…

渗透知识贴

文章目录 基础知识同源策略 常见web漏洞SQL注入漏洞 web中间件 基础知识 同源策略 同源策略是目前所有浏览器都实行的一种安全政策。A网页设置的 Cookie&#xff0c;B网页不能打开&#xff0c;除非这两个网页同源。所谓同源&#xff0c;是指&#xff1a;协议、端口、域名相同…

蓝桥杯刷题--RDay5

清理水域--枚举 8.清理水域 - 蓝桥云课 (lanqiao.cn)https://www.lanqiao.cn/problems/2413/learning/?page1&first_category_id1&second_category_id3&tags2023 小蓝有一个n m大小的矩形水域&#xff0c;小蓝将这个水域划分为n行m列&#xff0c;行数从1…

一文详解:使用HTTPS有哪些优势?

互联网发展到今天&#xff0c;HTTP协议的明文传输会让用户存在非常大的安全隐患。试想一下&#xff0c;假如你在一个HTTP协议的网站上面购物&#xff0c;你需要在页面上输入你的银行卡号和密码&#xff0c;然后你把数据提交到服务器实现购买。假如这个环节稍有不慎&#xff0c;…

ST 意法半导体人工智能(AI)X-CUBE-AI 扩展包入门指南

引言 本用户手册指导了基于 IDE 逐步构建用于 STM32 微处理器的完整人工智能&#xff08;AI&#xff09;项目&#xff0c;自动转换预训练好的神经网络&#xff08;NN&#xff09;并集成所生成的优化库。本手册还介绍了 X-CUBE-AI 扩展包&#xff0c;该扩展包与 STM32CubeMX 工具…

分类预测 | Matlab实现CPO-LSSVM冠豪猪算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现CPO-LSSVM冠豪猪算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现CPO-LSSVM冠豪猪算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现CPO-LSSVM冠豪猪算法优化最小二乘支持向量…

【经典算法】LeetCode 5: 最长回文子串(Java/C/Python3实现含注释说明,Medium)

目录 题目描述思路及实现方式一&#xff1a;动态规划法思路代码实现Java版本C语言版本Python3版本 复杂度分析 方式二&#xff1a;中心扩展法思路代码实现Java版本C语言版本Python3版本 复杂度分析 总结相似题目 标签(题目类型)&#xff1a;回文串、动态规划 题目描述 给定一…

OpenHarmony实战:瑞芯微RK3568移植案例

本文章是基于瑞芯微RK3568芯片的DAYU200开发板&#xff0c;进行标准系统相关功能的移植&#xff0c;主要包括产品配置添加&#xff0c;内核启动、升级&#xff0c;音频ADM化&#xff0c;Camera&#xff0c;TP&#xff0c;LCD&#xff0c;WIFI&#xff0c;BT&#xff0c;vibrato…

利用电动车进电梯检测系统识别电动车入楼行为,算法上实现的难点与方案

目前&#xff0c;我国电动自行车保有量已超过3.5亿辆。有限的充电场所难以满足日益增长的充电需求。许多人选择将电动车通过电梯带进家中充电。因此&#xff0c;火灾事故时有发生。数据显示&#xff0c;与电动车有关的起火事故占火灾总比35%。电梯空间狭小密闭&#xff0c;电动…

备战蓝桥杯(日益更新)(刷题)

备战蓝桥杯&#xff08;日益更新&#xff09;&#xff08;刷题&#xff09; 文章目录 备战蓝桥杯&#xff08;日益更新&#xff09;&#xff08;刷题&#xff09;前言&#xff1a;一、二分&#xff1a;1. acwing503 借教室&#xff1a;&#xff08;二分 差分&#xff09;2. ac…

计算机硬件组成

计算机硬件组成 基本组成核心组件连接方式与总线架构与技术特殊组件总结脑图 基本组成 CPU: 执行指令和进行数据处理内存: 存储程序和数据&#xff0c;分为RAM和ROM主板: 连接所有硬件的平台&#xff0c;传输电子信号输入设备: 如键盘、鼠标等输出设备: 如显示器、打印机等 核…

Taro框架中的H5 模板基本搭建

1.H5 模板框架的搭建 一个h5 的基本框架的搭建 基础template 阿乐/H5 Taro 的基础模板

OpenHarmony实战:轻量系统STM32F407芯片移植案例

介绍基于STM32F407IGT6芯片在拓维信息Niobe407开发板上移植OpenHarmony LiteOS-M轻量系统&#xff0c;提供交通、工业领域开发板解决方案。 移植架构采用Board与SoC分离方案&#xff0c;使用arm gcc工具链Newlib C库&#xff0c;实现了lwip、littlefs、hdf等子系统及组件的适配…

论文学习D2UNet:用于地震图像超分辨率重建的双解码器U-Net

标题&#xff1a;&#xff1a;Dual Decoder U-Net for Seismic Image Super-Resolution Reconstruction ——D2UNet&#xff1a;用于地震图像超分辨率重建的双解码器U-Net 期刊&#xff1a;IEEE Transactions on Geoscience and Remote Sensing 摘要&#xff1a;从U-Net派生…

【Linux】进程的状态(运行、阻塞、挂起)详解,揭开孤儿进程和僵尸进程的面纱,一篇文章万字讲透!!!!进程的学习②

目录 1.进程排队 时间片 时间片的分配 结构体内存对齐 偏移量补充 对齐规则 为什么会有对齐 2.操作系统学科层面对进程状态的理解 2.1进程的状态理解 ①我们说所谓的状态就是一个整型变量&#xff0c;是task_struct中的一个整型变量 ②.状态决定了接下来的动作 2.2运行状态 2.…

R语言绘图 | 散点小提琴图

原文链接&#xff1a;R语言绘图 | 散点小提琴图 本期教程 写在前面 本期的图形来自发表在Nature期刊中的文章&#xff0c;这样的基础图形在日常分析中使用频率较高。 获得本期教程数据及代码&#xff0c;后台回复关键词&#xff1a;20240405 绘图 设置路径 setwd("You…

【数据结构】顺序表的动态分配(步骤代码详解)

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;数据结构 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…