如何在Java中进行单元测试:JUnit 5的使用指南

如何在Java中进行单元测试:JUnit 5的使用指南

大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!

单元测试是软件开发中的一个关键环节,它确保代码的每个单元(即最小可测试组件)都能够按预期工作。JUnit 5是Java中广泛使用的单元测试框架,它提供了丰富的功能来编写和运行测试。本文将详细介绍如何在Java中使用JUnit 5进行单元测试。

1. 什么是JUnit 5?

JUnit 5是JUnit框架的最新版本,包含了几个不同的模块:

  • JUnit Platform:基础运行平台,支持在不同的IDE、构建工具和插件中运行测试。
  • JUnit Jupiter:包含新的编程模型和扩展模型。
  • JUnit Vintage:提供对JUnit 3和JUnit 4的支持。

2. 配置JUnit 5环境

在开始使用JUnit 5之前,需要配置项目的开发环境。以下是一个Maven项目的配置示例:

<dependencies><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.7.1</version><scope>test</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.7.1</version><scope>test</scope></dependency>
</dependencies>

对于Gradle项目,可以在build.gradle中添加以下依赖:

dependencies {testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.1'testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.1'
}

3. 编写第一个JUnit 5测试

在JUnit 5中,编写测试非常简单。以下是一个基本的测试类示例:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;public class CalculatorTest {@Testpublic void testAddition() {Calculator calculator = new Calculator();int result = calculator.add(2, 3);assertEquals(5, result, "2 + 3 should equal 5");}
}

在这个示例中,@Test注解标记了一个测试方法,assertEquals方法用于断言预期结果与实际结果是否相同。

4. JUnit 5的基本注解

JUnit 5提供了一系列注解来帮助管理测试生命周期和测试方法:

  • @Test:标记一个测试方法。
  • @BeforeEach:在每个测试方法执行之前运行。
  • @AfterEach:在每个测试方法执行之后运行。
  • @BeforeAll:在所有测试方法之前运行,仅运行一次,需为静态方法。
  • @AfterAll:在所有测试方法之后运行,仅运行一次,需为静态方法。

以下是使用这些注解的示例:

import org.junit.jupiter.api.*;public class LifecycleTest {@BeforeAllstatic void initAll() {System.out.println("Before all tests");}@BeforeEachvoid init() {System.out.println("Before each test");}@Testvoid testOne() {System.out.println("Test one");}@Testvoid testTwo() {System.out.println("Test two");}@AfterEachvoid tearDown() {System.out.println("After each test");}@AfterAllstatic void tearDownAll() {System.out.println("After all tests");}
}

5. 断言与异常测试

JUnit 5提供了多种断言方法来验证测试结果,如assertEqualsassertTrueassertFalse等。此外,还可以测试方法是否抛出异常:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;public class ExceptionTest {@Testvoid testException() {Exception exception = assertThrows(IllegalArgumentException.class, () -> {throw new IllegalArgumentException("Invalid argument");});assertEquals("Invalid argument", exception.getMessage());}
}

6. 参数化测试

参数化测试允许使用不同的参数多次运行相同的测试。JUnit 5提供了@ParameterizedTest注解和多个参数源注解,如@ValueSource@CsvSource等:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.Assertions.assertTrue;public class ParameterizedTestExample {@ParameterizedTest@ValueSource(strings = {"racecar", "radar", "level"})void testPalindrome(String candidate) {assertTrue(isPalindrome(candidate));}boolean isPalindrome(String str) {return str.equals(new StringBuilder(str).reverse().toString());}
}

7. 结论

通过本文的介绍,我们详细探讨了如何在Java中使用JUnit 5进行单元测试。从基本的测试编写、生命周期管理,到断言、异常测试和参数化测试,JUnit 5为开发者提供了强大而灵活的工具来确保代码质量。

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

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

相关文章

贪心算法练习题(2024/6/18)

什么是贪心 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 贪心算法一般分为如下四步&#xff1a; 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 1分发饼干 假设你是一位很棒的家长&#xff0c…

pytest测试框架pytest-rerunfailures插件重试失败用例

Pytest提供了丰富的插件来扩展其功能&#xff0c;介绍下插件pytest-rerunfailures &#xff0c;用于在测试用例失败时自动重新运行这些测试用例。 pytest-rerunfailures官方显示的python和pytest版本限制&#xff1a; Python 3.8pytest 7.2 或更新版本 此插件可以通过以下可…

Scala运算符及流程控制

Scala运算符及流程控制 文章目录 Scala运算符及流程控制写在前面运算符算数运算符关系运算符赋值运算符逻辑运算符位运算符运算符本质 流程控制分支控制单分支双分支多分支 循环控制for循环while循环循环中断嵌套循环 写在前面 操作系统&#xff1a;Windows10JDK版本&#xff…

1027. 方格取数

Powered by:NEFU AB-IN Link 文章目录 1027. 方格取数题意思路代码 1027. 方格取数 题意 某人从图中的左上角 A 出发&#xff0c;可以向下行走&#xff0c;也可以向右行走&#xff0c;直到到达右下角的 B 点。 在走过的路上&#xff0c;他可以取走方格中的数&#xff08;取…

ESP32-C3模组上跑通NVS(7)

接前一篇文章:ESP32-C3模组上跑通NVS(6) 上一回讲到乐鑫技术支持发来了操作自定义NVS分区的代码。本回就对于代码进行详细解析,并通过此过程看一下具体应如何进行正确的操作。下边就开始代码分析: 主函数 主函数即app_main()代码如下: void app_main(void) {esp_err_t…

FOC方案大合集!

获取链接&#xff01;&#xff01;&#xff01; 本次小编给大家带来了一份FOC的方案大合集。此套方案是基于峰岹科技FU68系列MCU的系列方案&#xff0c;包含常用的无感&#xff0c;有感无刷电机的应用&#xff0c;每份方案都包含了原理图&#xff0c;PCB&#xff0c;代码文件&…

【TOOL】ceres学习笔记(一) —— 教程练习

文章目录 一、Ceres Solver 介绍二、Ceres 使用基本步骤1. 构建最小二乘问题2. 求解最小二乘问题 三、使用案例1. Ceres Helloworld2. Powell’s Function3. Curve Fitting4. Robust Curve Fitting 一、Ceres Solver 介绍 Ceres-solver 是由Google开发的开源C库&#xff0c;用…

2024年P气瓶充装证模拟考试题库及P气瓶充装理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年P气瓶充装证模拟考试题库及P气瓶充装理论考试试题是由安全生产模拟考试一点通提供&#xff0c;P气瓶充装证模拟考试题库是根据P气瓶充装最新版教材&#xff0c;P气瓶充装大纲整理而成&#xff08;含2024年P气瓶…

[Open-source tool]Uptime-kuma的簡介和安裝於Ubuntu 22.04系統

[Uptime Kuma]How to Monitor Mqtt Broker and Send Status to Line Notify Uptime-kuma 是一個基於Node.js的開軟軟體&#xff0c;同時也是一套應用於網路監控的開源軟體&#xff0c;其利用瀏覽器呈現直觀的使用者介面&#xff0c;如圖一所示&#xff0c;其讓使用者可監控各種…

vue3父组件获取子组件的实例对象

一&#xff0c;ref 在父组件的模板里&#xff0c;对子组件的标签定义ref属性&#xff0c;并且设置属性值&#xff0c;在方法里获取ref()获取实例对象。 父组件&#xff1a; <template><div ><div>我是父组件</div><<SonCom ref"sonComRe…

Oracle中生僻汉字的解决办法

在Oracle数据库中处理生僻汉字时&#xff0c;主要面临的问题是某些字符集可能无法完全支持所有的汉字&#xff0c;特别是生僻字。以下是一些解决Oracle中生僻汉字问题的办法&#xff1a; 检查当前字符集&#xff1a; 使用SELECT USERENV(language) FROM dual;命令来查看当前数…

jlink使用记录

https://www.eet-china.com/mp/a79854.html Jlink使用技巧之读取STM32内部的程序stm32芯片解除写保护方法&#xff08;详细&#xff09;_stm32进入写保护如何用segger恢复-CSDN博客 stm32芯片解除写保护方法&#xff08;详细&#xff09; keil程序和jlink两种ccs使用Jlink调试时…

足底筋膜炎的症状

足底筋膜炎是足底的肌腱或者筋膜发生无菌性炎症所致&#xff0c;其症状主要包括&#xff1a; 1、疼痛&#xff1a;这是足底筋膜炎最常见和突出的症状。疼痛通常出现在足跟或足底近足跟处&#xff0c;有时压痛较剧烈且持续存在。晨起时或长时间不活动后&#xff0c;疼痛感觉尤为…

从0到1 Python基础

从0到1 Python基础 文章目录 从0到1 Python基础语法基础流程控制列表与元组字符串字典与集合初始函数**数学计算**日期时间 语法基础 变量&#xff1a;一个可以改变的量 &#xff08;1&#xff09; 变量的命名规则&#xff1a;变量由字母、数字与下划线组成&#xff1b;第一个字…

高通安卓12-安卓系统定制2

将开机动画打包到system.img里面 在目录device->qcom下面 有lito和qssi两个文件夹 现在通过QSSI的方式创建开机动画&#xff0c;LITO方式是一样的 首先加入自己的开机动画&#xff0c;制作过程看前面的部分 打开qssi.mk文件&#xff0c;在文件的最后加入内容 PRODUCT_CO…

Python | Leetcode Python题解之第174题地下城游戏

题目&#xff1a; 题解&#xff1a; class Solution:def calculateMinimumHP(self, dungeon: List[List[int]]) -> int:n, m len(dungeon), len(dungeon[0])BIG 10**9dp [[BIG] * (m 1) for _ in range(n 1)]dp[n][m - 1] dp[n - 1][m] 1for i in range(n - 1, -1, …

一文读懂LLM API应用开发基础(万字长文)

前言 Hello&#xff0c;大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者&#xff0c;上一篇文章中我们详细介绍了LLM开发的基本概念&#xff0c;包括LLM的模型、特点能力以及应用&#xff1b;&#x1f632; 在本文中作者将通过&#xff1a…

Redis—Set数据类型及其常用命令详解

文章目录 一、Redis概述Set类型1 SADD:向集合&#xff08;Set&#xff09;中添加一个或多个成员2 SCARD:获取集合&#xff08;Set&#xff09;中成员数量3 SDIFF:获取多个集合之间的差集4 SDIFFSTORE:计算多个集合之间的差集&#xff0c;并将结果存储在指定的目标集合中5 SMEMB…

改进YOLO系列 | ICLR2022 | OMNI-DIMENSIONAL DYNAMIC CONVOLUTION: 全维动态卷积

YOLO系列改进 | ICLR2022 | 全维动态卷积&#xff1a;中文综述 简介 YOLO&#xff08;You Only Look Once&#xff09;是一种目标检测算法&#xff0c;以其速度和精度著称。 本文将介绍YOLO系列的改进&#xff0c;包括ICLR2022上提出的全维动态卷积&#xff08;Omni-Dimensio…

2024年特种设备(起重机指挥)考试题库

31.《中华人民共和国特种设备安全法》规定&#xff0c;特种设备安全管理人员、检测人员和作业人员应当按照国家有关规定取得&#xff08; &#xff09;&#xff0c;方可从事相关工作。 A.合格成绩 B.相应资格 C.行业认可 答案:B 32.《中华人民共和国特种设备安全法》规定&…