【测试】JUnit

news2025/3/13 8:00:36

目 录

  • 一.注解
  • 二.断言
  • 三.用例的执行顺序
  • 四.参数化
  • 五.测试套件

自动化就是 selenium 脚本来实现的

junit 是 java 的单亓测试工具,只不过我们在实现自动化的时候需要借用一下下 junit 库里面提供的一些方法

引入依赖 Junit 5

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.10.1</version>
    <scope>test</scope>
</dependency>


一.注解

junit中提供了非常强大的注解功能。(取代了 main 函数执行的任务)

  • @Test:表示方法是测试方法,执行当前这个类时,会自动的执行该类下所有带@Test注解的用例

  • @BeforeEach:当前的方法需要在每个用例执行之前都执行一次

  • @BeforeAll:当前的方法需要在当前类下所有用例之前执行一次,被该注解修饰的方法必须为静态方法

  • @AfterEach:当前的方法需要在每个用例执行之后都执行一次

  • @AfterAll:当前的方法需要在当前类下所有用例之后执行一次,被该注解修饰的方法必须为静态方法

在这里插入图片描述


二.断言

Assertions 类

之前我们可知 “百度一下” 是属性值,当我们执行这个用例的时候,对于程序来说结果是正确的,对于测试人员来说是错误的。

对于测试人员来说,如果自动化测试用例执行结果是报错的,那么大多情况下是出现了bug,这种情况测试人员是需要立即去排查问题的

断言 匹配/不匹配:assertEquals / assertNotEquals

断言结果 为真/为假:assertTrue / assertFalse

断言结果 为空/不为空:assertNull / assertNotNull


三.用例的执行顺序

官方网站没有明确说明用例默认的执行顺序的规则

测试用例的执行并不会按照我们编写用例的顺序来执行

  1. 通过order注解来排序
    在这里插入图片描述
    先要使用注解说明当前类下所有的用例需要使用 order 注解来进行排序注意:该注解必须要用在类上
     
    然后通过 0rder 来指定用例的具体顺序

四.参数化

尽可能的通过一个用例,多组参数来模拟用户的行为

在使用参数化注解之前需要先声明该方法为参数化方法:@ParameterizedTest

  • 单参数:(要通过注解提供数据来源)

在这里插入图片描述

@ValueSource(数据类型方法 = {参数1,参数2,…})

数据类型包含:short,byte,int,long,float,double,char,boolean,java.lang.string

  • 多参数
  1. 从注解里手动编写数据源
    在这里插入图片描述
    每个双引号就是一组 参数/测试用例

  2. 从第三方 csv 文件读取数据源

在这里插入图片描述

创建好csv文件之后,一定要用系统自带的 Excel 工具来打开和编辑 csv 文件,不然会一堆乱码报错

  • 动态参数

在这里插入图片描述

如果我们要返回的数据类型是统一的,那么这里就直接写具体的类型

如果要返回的数据类型不统一,就需要使用组合类型 Arguments

还有第二种写法:

当我们不指定数据源方法名时,会自动的找跟用例方法名同名的静态方法

在这里插入图片描述

使用了参数化注解的方法不能再用@Test注解(只能作用在非参数化的用例上)


五.测试套件

当我们在不同的 Java.class 类中 或者 不同文件中,想把所有的注解下的程序同时运行起来该怎么做呢?测试套件解决了这个问题

先创建一个类,通过 @Suite 注解标识该类为测试套件类(而不是测试类)

方法一:指定类来运行用例

在这里插入图片描述

想要运行的用例必须要被@Test注解(除参数化的用例外)

方法二:指定包名来运行包下所有的用例

在这里插入图片描述

会发现包下有四个测试类,只运行了一个类

如果使用包名来指定运行的范围,那么该包下面所有的测试类的命名需要以 Test/Tests 结尾(T必须要大写)

想要运行的用例必须要被 @Test 注解(除参数化的用例外)

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

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

相关文章

php 数组函数

php 数组函数 1. 常用的php数组函数 1. 常用的php数组函数 array_pop() 删除数组中最后一个元素 array_push() 将一个或多个元素插入到数组的末尾 array_keys <?php $arr array("刘岩" > 30, "范冰冰" > 31, "娜扎" > 31);$…

DS:八大排序之堆排序、冒泡排序、快速排序

创作不易&#xff0c;友友们给个三连吧&#xff01;&#xff01; 一、堆排序 堆排序已经在博主关于堆的实现过程中详细的讲过了&#xff0c;大家可以直接去看&#xff0c;很详细,这边不介绍了 DS&#xff1a;二叉树的顺序结构及堆的实现-CSDN博客 直接上代码&#xff1a; …

备战蓝桥杯---图论之最小生成树

首先&#xff0c;什么是最小生成树&#xff1f; 他就是无向图G中的所有生成树中树枝权值总和最小的。 如何求&#xff1f; 我们不妨采用以下的贪心策略&#xff1a; Prim算法&#xff08;复杂度&#xff1a;&#xff08;nm)logm)&#xff1a; 我们对于把上述的点看成两个集…

MAC VSCODE g++编译器无法编译C++11语法的 解决办法(CodeRunner版本)

如果你是使用的 codeRunner 这个插件&#xff0c;就是这个按钮 coderunner的原理大致是&#xff1a;先判断你这是什么语言&#xff0c;然后有一个 code-runner.executorMap 来对应各个语言是用什么执行语句 我发现&#xff0c;我修改之前&#xff08;无法执行C11语法的原因是&a…

智能汽车专题:智能驾驶2023年度报告

今天分享的是智能汽车系列深度研究报告&#xff1a;《智能汽车专题&#xff1a;智能驾驶2023年度报告》。 &#xff08;报告出品方&#xff1a;量子位智库&#xff09; 报告共计&#xff1a;30页 来源&#xff1a;人工智能学派 顶天立地&#xff1a;技术进阶路线明晰 根据…

echarts制作两个柱状图

let colorList[#02ce8b,#ffbe62,#f17373]; let data1 [90,80,70,50] option { title:[{ // 第一个标题text: 环保检测, // 主标题textStyle: { // 主标题样式color: #333,fontWeight: bold,fontSize: 16},left: 20%, // 定位到适合的位置top: 10%, // 定位到适合的位置},{ //…

小程序获取手机号:快速验证和实时验证

概述 小程序手机号快速验证和实时验证都已经开始收费了。 手机号实时验证组件&#xff0c;在每次请求时&#xff0c;平台均会对用户选择的手机号进行实时验证&#xff1b;每次组件调用成功&#xff0c;收费0.04元手机号快速验证组件&#xff0c;平台会对号码进行验证&#xf…

论文阅读_语音识别_Wisper

英文名称: Robust Speech Recognition via Large-Scale Weak Supervision 中文名称: 通过大规模弱监督实现鲁棒语音识别 链接: https://proceedings.mlr.press/v202/radford23a.html 代码: https://github.com/openai/whisper 作者: Alec Radford, Jong Wook Kim, Tao Xu, Greg…

基于协同过滤的时尚穿搭推荐系统

项目&#xff1a;基于协同过滤的时尚穿搭推荐系统 摘 要 基于协同过滤的时尚穿搭推荐系统是一种能自动从网络上收集信息的工具&#xff0c;可根据用户的需求定向采集特定数据信息的工具&#xff0c;本项目通过研究服饰流行的分析和预测的分析和预测信息可视化时尚穿搭推荐系统…

2024免费人像摄影后期处理工具Portraiture4.1

Portraiture作为一款智能磨皮插件&#xff0c;确实为Photoshop和Lightroom用户带来了极大的便利。通过其先进的人工智能算法&#xff0c;它能够自动识别并处理照片中的人物皮肤、头发和眉毛等部位&#xff0c;实现一键式的磨皮美化效果&#xff0c;极大地简化了后期处理的过程。…

STM32下载后需要复位

下载后需要复位才能自动运行程序&#xff0c;需要以下两步 STEP1 STEP2 一个勾选&#xff0c;一个不勾选。

乡政府|乡政府管理系统|基于Springboot的乡政府管理系统设计与实现(源码+数据库+文档)

乡政府管理系统目录 目录 基于Springboot的乡政府管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、活动信息管理 3、新闻类型管理 4、新闻动态管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推…

内存块与内存池

&#xff08;1&#xff09;在运行过程中&#xff0c;MemoryPool内存池可能会有多个用来满足内存申请请求的内存块&#xff0c;这些内存块是从进程堆中开辟的一个较大的连续内存区域&#xff0c;它由一个MemoryBlock结构体和多个可供分配的内存单元组成&#xff0c;所有内存块组…

JAVA之Java线程核心详解

Java线程核心 1.进程和线程 进程&#xff1a;进程的本质是一个正在执行的程序&#xff0c;程序运行时系统会创建一个进程&#xff0c;并且给每个进程分配独立的内存地址空间保证每个进程地址不会相互干扰。同时&#xff0c;在 CPU 对进程做时间片的切换时&#xff0c;保证进程…

Java 抽象容器类源码剖析

总体介绍 抽象容器类接口和具体容器类的关系如图所示&#xff0c;顶层包括Collection、List、Set、Queue、Deque和Map6个抽象容器类。 AbstractCollection&#xff1a;实现了Collection接口&#xff0c;被抽象类AbstractList、AbstractSet、AbstractQueue继承&#xff0c;Arra…

飞天使-k8s知识点19-kubernetes实操4-资源调度 标签和选择器:Label与Selector的使用-版本回退

文章目录 添加label资源调度 Deployment&#xff1a;创建与配置文件解析rs pod deploy 的关联信息展示Deployment&#xff1a;滚动更新Deployment&#xff1a;回滚回退版本实际操作 添加label [rootkubeadm-master1 test]# kubectl get pod NAME …

OpenCV Mat实例详解 四

OpenCV Mat实例详解三中详细介绍来了OpenCV Mat类的公有静态成员函数&#xff0c;下面介绍OpenCV Mat类的其他常用成员函数。 OpenCV Mat类常用成员函数 Mat & adjustROI (int dtop, int dbottom, int dleft, int dright)&#xff1b; dtop ROI 上边界移动值&#xff0c;如…

Java实现新能源电池回收系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户档案模块2.2 电池品类模块2.3 回收机构模块2.4 电池订单模块2.5 客服咨询模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 E-R 图设计 四、系统展示五、核心代码5.1 增改电池类型5.2 查询电池品类5.3 查询电池回…

LabVIEW智能监测系统

LabVIEW智能监测系统 设计与实现一个基于LabVIEW的智能监测系统&#xff0c;通过高效的数据采集和处理能力&#xff0c;提高监测精度和响应速度。系统通过集成传感器技术与虚拟仪器软件&#xff0c;实现对环境参数的实时监测与分析&#xff0c;进而优化监控过程&#xff0c;提…

一些配置问题记录

真的很感慨 为什么一开始的下载的软件还能用 卸载或重装后的软件总是存在各种各样的错误 真令人心烦 GNURADIO运行简单的采集信号程序报错&#xff0c; 其实不太理解为什么会出现这类错误&#xff0c;解决方法为 安装 jackd2 软件包&#xff0c;然后尝试手动启动 Jack 服务器…