单元测试框架 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,近距离拍摄物体…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...