单元测试框架 Junit
目录
什么是Junit?
Junit的基础注解有哪些?
什么是参数化?参数化通过哪几种方式传输数据?
单参数
多参数
CSV文件获取参数
方法获取参数
测试用例执行顺序如何控制?
什么是断言assert?Assertions类的常用方法?
什么是测试套件?如何使用测试套件?
什么是Junit?
Junit是一个用于Java的单元测试框架,用于管理已经编写好的测试用例。
使用时需要引入 Junit-jupiter-api 依赖。
Junit需要从注解、参数化和测试套件三个方面去理解。
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.9.3</version>
</dependency>
Junit的基础注解有哪些?
@Test:用于表示该方法是一个测试用例,该注解通常不应该和@ParameterizedTest注解同时使用
@Disabled:忽略被该注解修饰的测试用例
@BeforeAll:执行所有测试用例之前,会调用该方法
@AfterAll:执行素偶又测试用例之后,会调用该方法
@BeforeEach:每一个测试用例运行之前,会调用该方法
@AfterEach:每一个测试用例运行之后,会调用该方法
什么是参数化?参数化通过哪几种方式传输数据?
参数化是指在测试用例需要传入参数时,使用的传输手段。
使用时需要引入 junit-jupiter-params 依赖
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><version>5.9.3</version><scope>compile</scope>
</dependency>
参数化通过以下四种方式传输数据:
- 单参数
- 多参数
- CSV文件获取参数
- 方法获取参数
单参数
使用 @ParameterizedTest 注解
使用 @ValueSource 注解,在注解中填入需要传递的单个或多个测试用例
通过方法参数接收,每次接收一个测试用例
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
public void oneParameter(int i) {System.out.println("oneParameter: " + i);
}
多参数
使用 @ParameterizedTest 注解
使用 @CsvSource 注解,在注解中填入需要传递的多个测试用例
通过方法参数接收,每次接收的测试用例数量由参数个数决定
@ParameterizedTest
@CsvSource(value = {"张三,12", "李四,13", "王五,14"})
public void multipleParameter(String name, int age) {System.out.println("csvFileParameter: " + name + "->" + age);
}
CSV文件获取参数
使用 @ParameterizedTest 注解
使用 @CsvFileSource 注解,传入 csv 文件
在 resources 目录中,创建对应的 csv 文件,csv 文件每一行为一个参数,参数之间使用 ‘,’ 分隔
通过方法参数接收测试用例,每次接收一行
test.scv
张三,12
李四,13
王五,14----------------------------------------------------------------@ParameterizedTest
@CsvFileSource(resources = "/test.csv")
public void csvFileParameter(String name, int age) {System.out.println("csvFileParameter: " + name + "->" + age);
}
方法获取参数
使用 @ParameterizedTest 注解
使用 @MethodSource 注解,指定方法名
创建传输参数的方法发,方法必须为 static
通过方法参数接收测试用例
public static Stream<Arguments> methodSource() {return Stream.of(Arguments.of("张三", 12),Arguments.of("李四", 13),Arguments.of("王五", 14));
}@ParameterizedTest
@MethodSource(value = "methodSource")
public void methodParameter(String name, int age) {System.out.println("csvFileParameter: " + name + "->" + age);
}
测试用例执行顺序如何控制?
使用注解 @TestMethodOrder,不使用该注解时,测试用例的执行顺序是不确定的。
使用注解 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 修饰类,表示该类中的测试用例可更改优先级。
再使用注解 @Order(优先级) 修饰方法,并将代表优先级的数字填入参数中,数字 1 表示最高优先级。
使用注解 @TestMethodOrder(MethodOrderer.Random.class) 修饰类,表示该类中的测试用例将被随机执行。
什么是断言assert?Assertions类的常用方法?
断言表示结果必须符合预期,否则抛出异常,测试不通过。
断言使用 Assertions 类。
Assertions 类的常用方法包括:
断言相等:assertEquals()
断言不等:assertNotEquals()
断言为空:assertNull()
断言不为空:assertNotNull()
什么是测试套件?如何使用测试套件?
测试套件是用于将多个测试用例的类同时运行的工具(相当于将众多测试打包)。
使用测试套件时,需要引入以下两个依赖:
junit-platform-suite :测试套件
junit-jupiter-engine :测试套件引擎
- 使用注解 @Suite() 修饰类,表示启用测试套件。
- 可以使用两种方式将测试用例打包为测试套件:
- 可以通过 载入类名 运行测试用例:使用注解 @SelectClasses({类名.class...}) ,在注解中传入需要测试的类。
- 可以通过 载入包名 运行测试用例:将多个测试用例类放入同一个包中,使用注解@SelectPackages({包名...}),在注解中传入需要测试的包。
<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
<dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-suite</artifactId><version>1.9.2</version><scope>test</scope>
</dependency><!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.9.2</version><scope>test</scope>
</dependency>
相关文章:
单元测试框架 Junit
目录 什么是Junit? Junit的基础注解有哪些? 什么是参数化?参数化通过哪几种方式传输数据? 单参数 多参数 CSV文件获取参数 方法获取参数 测试用例执行顺序如何控制? 什么是断言assert?Assertions类…...
数电票怎么查询真伪|发票识别接口|发票查验接口|PHP接口文档
对于财务工作者而言,发票管理是一项即繁琐又十分重要的工作,尤其是在数字化电子发票快速普及的当下,发票识别、核验、查重等工作无疑增加了财务人员的工作难度。财务人员每天都要与大量的发票打交道,人工管理模式难免会出现手动录…...
外包干了一个月,忘记Git怎么使用了...
外包干了一个月,忘记Git怎么使用了… Git 是一个流行的版本控制系统,它允许开发人员跟踪和管理代码更改。在本篇文章中,我们将介绍 Git 的配置和使用命令,以帮助您更好地理解和使用这个强大的工具。 首先,让我们开始…...
【微服务篇】深入理解微服务网关原理以及Spring Gateway
微服务网关的作用 微服务网关在微服务架构中扮演着至关重要的角色,它主要负责请求的路由、组成服务间的通信桥梁、聚合不同服务的数据以及提供跨服务的统一认证机制。以下是微服务网关的几个主要作用: 请求路由: 微服务网关充当所有入站请求的入口点&a…...
循序渐进丨MogDB 对 Oracle DBLink兼容性增强
本特性自 MogDB 5.0.0版本开始引入,支持 Oracle DBLink语法,可以使用符号访问 Oracle 数据库中的表。 示 例 01 环境准备 MogDB 环境 已安装 MogDB 数据库。已安装oracle_fdw插件,具体安装方法参见oracle_fdw安装文档https://docs.mogdb.io/…...
【Python操作基础】——集合
🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享 擅长Python、Matlab、R等主流编程软件 累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…...
蓝桥杯day15刷题日记
P8748 [蓝桥杯 2021 省 B] 时间显示 思路:好奇怪的橙题,简单的运算就解决了 #include <iostream> using namespace std; long long n; int main() {cin>>n;n/1000;int hn/3600%24;int mn%3600/60;int sn%3600%60;printf("%02d:%02d:%…...
AndroidStudio中一些实用插件
1.RainbowBrackets插件为圆括号、方括号和花括号内的代码添加了漂亮的彩虹色 2.CodeGlance类似于Sublime或Xcode,CodeGlance插件在编辑器中嵌入了代码迷你图。滚动条也有所增大。在CodeGlance预览文件的代码模式下,用户可以快速导航到目标处。 3.ADBWifi…...
计算机网络⑧ —— IP地址
IP位于TCP/IP参考模型的第三层,也就是⽹络层 ⽹络层的主要作⽤:实现主机与主机之间的通信,也叫点对点通信 问题1:⽹络层(IP)与数据链路层(MAC)有什么关系呢? MAC的作⽤:实现直连的两个设备之间通信。IP的…...
YOLOv5-小知识记录(一)
0. 写在前面 这篇博文主要是为了记录一下yolov5中的小的记忆点,方便自己查看和理解。 1. 完整过程 (1)Input阶段,图片需要经过数据增强Mosaic,并且初始化一组anchor预设; (2)特征提…...
服务运营 | 印第安纳大学翟成成:改变生活的水井选址
编者按: 作者于2023年4月在“Production and Operations Management”上发表的“Improving drinking water access and equity in rural Sub-Saharan Africa”探讨了欠发达地区水资源供应中的可达性和公平性问题。作者于2020年1月去往非洲埃塞俄比亚提格雷地区进行…...
计算机网络(特南鲍姆版) 期末总结
教材《计算机网络(第六版)》 特南鲍姆版 介绍 互联的可以交换信息的计算机称之为计算机网络,如:英特网 用途 1.访问信息 客户-服务器模型 peer-to-peer system(点对点技术,P2P) P2P…...
【Hive】HIVE运行卡死没反应
Hive运行卡死 再次强调 hive:小兄弟,没想到吧,咱可不是随便的人。😄 那么,这次又遇见了hadoop问题,问题描述是这样的。 hive> insert into test values(1, nucty, 男); Query ID atguigu_202403241754…...
【webpack】----错误解决【Cannot read properties of undefined (reading ‘tap‘)】
1. 报错场景 安装 webpack-obfuscator 后,进行 js 代码混淆编译的时候报错。 2. 报错截图 3. 错误原因 通常是由于版本不兼容或配置错误引起的。 4. 查询本地 webpack 版本 4.1 查询命令 npm 查询 npm view webpack versionyarn 查询 yarn info webpack ver…...
C/C++ 不要使用 boost::asio::ip::address::from_string 函数来转换字符串为IP地址
如本文标题所示,不要使用 boost::asio::ip::address::from_string 函数来转换字符串为IP地址,它可能导致崩溃。 这是因为 boost::asio::ip::address::from_string 函数实现并不安全有问题,在 Android 平台NDK优化编译的情况下,100…...
【Java多线程】4——特定场景解决办法
4 特定场景解决方法 ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记仓库👉https://github.com/A-BigTree/tree-learning-notes 个人主页👉https://www.abigtree.top ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个st…...
Python:语法糖
注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 在编程世界中,有一个词语听起来既甜蜜又神秘:语法糖(Syntactic Sugar)。这个术语并不是指真正的糖…...
nginx mirror 流量镜像
流量镜像 (Traffic Mirroring),也称为流量影子 (Traffic Shadowing),是一种强大的、无风险的测试应用版本的方法,它将实时流量的副本发送给被镜像的服务。 采用这种方法,您可以搭建一个与原环境类似的环境以进行验收测试ÿ…...
霉霉说地道中文,口型、卡点几乎完美,网友:配音时代结束了?
ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站 每天给大家更新可用的国内可用chatGPT资源 更多资源欢迎关注 「给电影配音的时代即将结束了。」 AI 的发展让很多人直呼饭碗被抢了,以前是艺术家、程序员…… 现在配音员也要失业了&a…...
【生活】相机/图像各参数
文章目录 专业模式图片编辑-滤镜实体滤镜软件模拟滤镜 图片编辑-增强曝光亮度对比度饱和度自然饱和度色温色调高光阴影HSL色调分离褪色颗粒锐化晕影清晰度暗角 参考 专业模式 第一个参数WB是白平衡,调节色彩的。 第二个是对焦F,近距离拍摄物体…...
WubiUEFI终极指南:如何在Windows中零风险安装Ubuntu系统
WubiUEFI终极指南:如何在Windows中零风险安装Ubuntu系统 【免费下载链接】wubiuefi fork of Wubi (https://launchpad.net/wubi) for UEFI support and for support of recent Ubuntu releases 项目地址: https://gitcode.com/gh_mirrors/wu/wubiuefi 你是否…...
M2LOrder模型在AI编程助手场景的应用:代码注释情感分析
M2LOrder模型在AI编程助手场景的应用:代码注释情感分析 1. 引言 你有没有在代码注释里写过“这里有个天坑,后面的人小心”或者“TODO: 这个逻辑太绕了,得重构”?这些看似随手的吐槽,其实藏着开发者最真实的情绪。代码…...
RK3568交叉编译环境搭建:ARM官方GCC 8.3与Linaro版本到底怎么选?我的踩坑与选择心得
RK3568交叉编译环境搭建:ARM官方GCC 8.3与Linaro版本深度对比与实战选择指南 在嵌入式开发领域,交叉编译环境的搭建往往是项目启动的第一道门槛。对于RK3568这样的高性能ARM处理器,选择合适的交叉编译器不仅关系到开发效率,更直接…...
从键盘敲击到屏幕显示:一个字符在Linux内核里的完整旅程(附C代码模拟)
从键盘敲击到屏幕显示:一个字符在Linux内核里的完整旅程 当你在终端敲下字母"A"时,这个简单的动作背后隐藏着一场跨越硬件、内核和用户空间的精密协作。让我们跟随这个字符的脚步,揭开Linux系统如何处理键盘输入的神秘面纱。 1. …...
bilibili-downloader开源工具:突破B站4K视频下载限制的全攻略
bilibili-downloader开源工具:突破B站4K视频下载限制的全攻略 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 在数字内容消…...
Windows驱动管理与系统优化:DriverStore Explorer全方位解决方案
Windows驱动管理与系统优化:DriverStore Explorer全方位解决方案 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 设备驱动维护是保障Windows系统稳定运行的核心环节&…...
Wan2.2-I2V-A14B部署教程:解决OOM/驱动报错/端口冲突三大常见问题
Wan2.2-I2V-A14B部署教程:解决OOM/驱动报错/端口冲突三大常见问题 1. 镜像概述与核心优势 Wan2.2-I2V-A14B是一款专为文生视频任务优化的私有部署镜像,特别针对RTX 4090D 24GB显存配置进行了深度优化。这个镜像最大的特点是解决了AI视频生成领域常见的…...
别再手动算脉冲了!用STM32的编码器接口模式(TIM_EncoderInterfaceConfig)实现电机测速,附完整代码
STM32硬件编码器接口实战:精准电机测速的工程化实现 在电机控制系统中,转速测量是闭环控制的基础环节。传统基于外部中断的软件计数方案不仅占用CPU资源,还面临脉冲丢失和方向误判的风险。STM32系列微控制器内置的硬件编码器接口(…...
AI浪潮冲击下,前端该何去何从
🌊 初级前端工程师:向“深水区”扎根技能树与学习路径定位:面向初级前端开发工程师,聚焦底层原理、工程化思维与可验证的实战输出,构建 AI 时代不可替代的技术护城河。📐 核心原则(避坑指南&…...
医疗器械小白必看:B型、BF型、CF型设备到底怎么选?附真实医院案例解析
医疗器械采购指南:B型、BF型与CF型设备的实战选择策略 去年某三甲医院ICU因监护仪选型不当导致患者数据异常的事件,让医疗器械电气安全标准重新成为行业焦点。作为医疗设备采购人员,面对B型、BF型、CF型这些专业术语时,是否常感到…...
