【测试】——JUnit

📖 前言:JUnit 是一个流行的 Java 测试框架,主要用于编写和运行单元测试,用来管理测试用例。本文采用JUnit 5

在这里插入图片描述


目录

  • 🕒 1. 添加依赖
  • 🕒 2. 注解
    • 🕘 2.1 @Test
    • 🕘 2.2 @BeforeAll @AfterAll
    • 🕘 2.3 @BeforeEach @AfterEach
    • 🕘 2.4 @Disabled
  • 🕒 3. 参数化
    • 🕘 3.1 单参数
    • 🕘 3.2 多参数
      • 🕤 3.2.1 CSV
      • 🕤 3.2.2 方法
  • 🕒 4. 测试用例的执行顺序
    • 🕘 4.1 默认顺序
    • 🕘 4.2 指定顺序
    • 🕘 4.3 随机顺序
  • 🕒 5. 断言
  • 🕒 6. 测试套件

🕒 1. 添加依赖

🔎 junit-jupiter-api依赖链接

在这里插入图片描述

🕒 2. 注解

🕘 2.1 @Test

这样就不需要main方法就能运行了

import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;public class JUnitTest {@Test// @Test 表明当前的方法是一个测试用例void test01(){WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com/");}
}

🕘 2.2 @BeforeAll @AfterAll

@BeforeAll
// 当前所有的测试用例执行之前执行这个方法
static void setUp(){System.out.println("开始执行 @BeforeAll 修饰的方法");
}
@AfterAll
// 当前所有的测试用例执行之后执行这个方法
static void tearDown(){System.out.println("开始执行 @AfterAll 修饰的方法");
}

在UI自动化测试中,通常情况下,创建驱动,打开网页,放到BeforeAll里面;关闭浏览器放到AfterAlI

🕘 2.3 @BeforeEach @AfterEach

@BeforeEach
// 当前每个测试用例执行之前执行这个方法
void boforeTest(){System.out.println("开始执行 @BeforeEach 修饰的方法");
}
@AfterEach
// 当前每个测试用例执行之后执行这个方法
void afterTest(){System.out.println("开始执行 @AfterEach 修饰的方法");
}

🕘 2.4 @Disabled

忽略当前测试用例(当前这个测试用例不执行)

🕒 3. 参数化

参数化中有单参数、多参数、CSV、方法。

🔎 junit-jupiter-params依赖链接

🕘 3.1 单参数

@ParameterizedTest@ValueSource(strings = {"1","2","3"})void oneParameter(String str){System.out.println(str);}

在这里插入图片描述

注意,以下两个注解不能同时用来修饰一个方法。

@Test
@ParameterizedTest

🕘 3.2 多参数

🕤 3.2.1 CSV

@ParameterizedTest
@CsvSource({"1, 2, ''"})
void csvTest(String x,String y,String q){System.out.println(x);System.out.println(y);System.out.println(q);		// 空参数System.out.println("================");
}

在这里插入图片描述

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

在这里插入图片描述

🕤 3.2.2 方法

public static Stream<Arguments> Generator() {return Stream.of(Arguments.arguments(1,"小张"),Arguments.arguments(2,"小李"));
}// 注册参数
@ParameterizedTest
@MethodSource("Generator")
void methodTest(int num,String name){System.out.println(num + ":" + name);
}

在这里插入图片描述

🕒 4. 测试用例的执行顺序

🕘 4.1 默认顺序

public class JunitTest02 {@Disabled// 忽略当前测试用例(当前这个测试用例不执行)@Testvoid test01(){WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com/");}@Testvoid test02(){System.out.println("这是第2个测试用例");}@Testvoid test03(){System.out.println("这是第3个测试用例");}@Testvoid test04(){System.out.println("这是第4个测试用例");}
}

在这里插入图片描述
可以看到是从上往下执行的,那么此时我们改变一下测试用例的顺序,将test04放到前面:

在这里插入图片描述

可以看到依旧是原先的顺序,是因为JUnit有自己的一套固定顺序。

那么,如何根据指定的顺序来执行测试用例呢?

🕘 4.2 指定顺序

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest02 {@Disabled// 忽略当前测试用例(当前这个测试用例不执行)@Testvoid test01(){WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com/");}@Order(1)@Testvoid test02(){System.out.println("这是第2个测试用例");}@Testvoid test03(){System.out.println("这是第3个测试用例");}@Order(2)@Testvoid test04(){System.out.println("这是第4个测试用例");}
}

在这里插入图片描述
可以看到,我们是通过注解 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 设定为根据指定的顺序来执行测试用例,通过 @Order 来指定具体的测试用例执行的顺序,没有被 @Order修饰的测试用例默认最后执行。

🕘 4.3 随机顺序

@TestMethodOrder(MethodOrderer.Random.class)
public class JunitTest02 {@Disabled// 忽略当前测试用例(当前这个测试用例不执行)@Testvoid test01(){WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com/");}@Order(1)@Testvoid test02(){System.out.println("这是第2个测试用例");}@Testvoid test03(){System.out.println("这是第3个测试用例");}@Order(2)@Testvoid test04(){System.out.println("这是第4个测试用例");}
}

在这里插入图片描述

可以看到每次执行的测试用例顺序不同,而且原先的 @Order 不生效。

🕒 5. 断言

@ParameterizedTest
@ValueSource(ints = {10})
void assertTest(int num){// 断言相等Assertions.assertEquals(num,10);// 断言不相等Assertions.assertNotEquals(num,11);// 断言为空Assertions.assertNull(num);// 断言不为空Assertions.assertNotNull(num);
}

在这里插入图片描述

🕒 6. 测试套件

测试套件:通过一段代码直接将所有的测试用例跑起来。

🔎 junit-platform-suite依赖链接

<scope>test</scope>删去

🔎 jupiter-engine依赖链接

@Suite
@SelectClasses({JUnitTest.class,JunitTest02.class})
public class RunSuite {
}

通过添加以上两个注解就可以将所有需要测试的类运行起来。

在这里插入图片描述
执行指定的包:

@Suite
@SelectPackages({"Junitlearn","Junitlearn02"})
public class RunSuite {
}

OK,以上就是本期知识点“Junit”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~

❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

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

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

相关文章

OceanBase 3.X 高可用 (一)

OceanBase 3.X 高可用&#xff08;一&#xff09; 一、分布式核心 OceanBase 3.x 采用的是paxos 协议&#xff0c;与raft协议相比。其复杂程度高&#xff0c;实现技术难度大。 Paxos 协议允许事务日志乱序发送&#xff0c;顺序提交。raft允许事务顺序发送&#xff0c;顺序提…

Windows Internals 7th Edition English Download

天翼云盘 珍藏美好生活 家庭云|网盘|文件备份|资源分享天翼云盘是中国电信推出的云存储服务&#xff0c;为用户提供跨平台的文件存储、备份、同步及分享服务&#xff0c;是国内领先的免费网盘&#xff0c;安全、可靠、稳定、快速。天翼云盘为用户守护数据资产。https://cloud.1…

高并发内存池(四):查缺补漏 与 申请内存过程的调试

目录 查缺补漏 问题&#xff1a;min函数的冲突问题 申请内存过程的调试 当前文件展示 Common.h ObjectPool.h ConcurrentAlloc.h ThreadCache.h CentralCache.h PageCache.h ThreadCache.cpp CentralCache.cpp PageCache.cpp UnitTest.cpp 单进程单span 单进程…

谷歌收录批量查询,怎么查看批量查询谷歌收录情况

在SEO&#xff08;搜索引擎优化&#xff09;领域&#xff0c;确保网站内容被谷歌等搜索引擎有效收录是提升网站可见性和流量的关键步骤。批量查询谷歌收录情况&#xff0c;能够帮助网站管理员快速了解哪些页面已被搜索引擎识别并编入索引&#xff0c;哪些页面可能存在问题需要优…

【python】石头剪刀布,模拟十次并统计获胜次数

解决问题 下面是一个使用Python编写的剪刀、石头、布游戏的程序&#xff0c;包含玩家与计算机对战和模拟计算机对战10次的功能。 import random def get_computer_choice(): return random.randint(0, 2) def get_user_choice(): choice input("请输入剪刀(0)…

Spring高手之路24——事务类型及传播行为实战指南

文章目录 1. 编程式事务&#xff08;不推荐&#xff09;2. 声明式事务&#xff08;推荐&#xff09;3. 事务的传播行为&#xff08;复杂混合事务场景及时序图说明&#xff09;3.1 NESTED和REQUIRES_NEW传播行为的区别 1. 编程式事务&#xff08;不推荐&#xff09; 定义&#…

MAC激活Typora以及禁止成功激活弹窗的方法

激活 Typora 首先在官网下载 Typora 的最新版 并且安装。 打开以下目录 /Applications/Typora.app/Contents/Resources/TypeMark/page-dist/static/js/ 注意在 Applications 中&#xff0c;需要对 Typora 右键选择 Show Packages Contents 即可进入 Typora.app。 在该目录的文…

C++自动驾驶面试核心问题整理

应用开发 概述&#xff1a;比较基础&#xff0c;没啥壁垒&#xff0c;主要有linux开发经验即可 问题&#xff1a;基础八股&#xff0c;如计算机网络、操作系统、c11等基础三件套&#xff1b;中等难度算法题1-2道。 中间件开发&#xff08;性能优化&#xff09; 概述&am…

快递物流查询-快递查询-快递单号查询-快递物流单号查询-快递物流轨迹查询-快递物流查询接口

快递物流查询接口&#xff08;API&#xff09;是一种允许开发者通过编程方式实时查询快递物流信息的服务。这些接口通常集成了多家快递公司的物流数据&#xff0c;为电商平台、物流管理系统、个人用户等提供便捷的物流查询服务。以下是关于快递物流查询接口的一些详细介绍&…

哪有什么三教九流,物以类聚罢了——kmeans聚类算法

观察人类社会&#xff0c;亦或说车水马龙中的光怪陆离&#xff0c;不难发现《马原》中介绍的人类社会中的个体&#xff0c;总是通过某种方面的“类似”聚在一起&#xff0c;文学上称这种现象叫做物以类聚&#xff0c;人以群分。 一.引言 前文提到&#xff0c;每个数据项&#x…

SpringBoot项目License证书生成与验证(TrueLicense) 【记录】

SpringBoot项目License证书生成与验证(TrueLicense) 【记录】 在非开源产品、商业软件、收费软件等系统的使用上&#xff0c;需要考虑系统的使用版权问题&#xff0c;不能随便一个人拿去在任何环境都能用。应用部署一般分为两种情况&#xff1a; 应用部署在开发者自己的云服务…

Qt笔记(十七)cmake编译Qt项目

Qt笔记&#xff08;十七&#xff09;cmake编译Qt项目 1. 文件内容与文件结构1.1.文件目录1.2. CMakeLists.txt内容1.3. main.cpp文件1.4. mouseevent.h1.5. mouseevent.cpp1.6. 生成Visual Studio项目后编译报错1.7. 界面显示中文乱码问题 1. 文件内容与文件结构 1.1.文件目录…

jdk11特性介绍

JDK 11&#xff08;也称为Java 11&#xff09;是Java平台的一个重要版本&#xff0c;它引入了许多新特性和改进&#xff0c;旨在提高开发者的生产力和Java平台的性能。以下是一些JDK 11的主要特性&#xff1a; 局部变量类型推断&#xff08;Local-Variable Syntax for Lambda P…

2009考研数学真题解析-数二:

第一题&#xff1a; 解析&#xff1a;先找间断点&#xff1a;分母不能等于0&#xff0c;分母是sinΠx&#xff0c; 因此不难看出间断点是x0&#xff0c;-1&#xff0c;-2&#xff0c;-3。。。。。 接着一个一个来算这些点是什么间断点。 &#xff0c;从x趋于2开始&#xff0c;分…

JavaScript是如何来的~~

文章目录 前言一、网络的诞生 ( The birth of the Web )二、Mosaic 浏览器三、Netscape 浏览器四、JavaScript的诞生 ~ 千呼万唤始出来总结 前言 例如&#xff1a;想要了解一门语言的发展历程&#xff0c;首先你得知道它是怎么来的&#xff0c;所以本文开篇介绍了网络的基本发…

智能BI平台项目

1.项目介绍 BI商业智能&#xff1a;数据可视化、报表可视化系统 4&#xff09;发布订阅 Resource 是基于名称进行查找的&#xff0c;而Spring框架中更常用的 Autowired 则是基于类型进行查找的。如果找不到匹配的bean&#xff0c;Autowired 会抛出异常&#xff0c;而 Resource…

EAGLE——探索混合编码器的多模态大型语言模型的设计空间

概述 准确解释复杂视觉信息的能力是多模态大型语言模型 (MLLM) 的关键重点。最近的研究表明&#xff0c;增强的视觉感知可显著减少幻觉并提高分辨率敏感任务&#xff08;例如光学字符识别和文档分析&#xff09;的性能。最近的几种 MLLM 通过利用视觉编码器的混合来实现这一点…

网络层协议 —— IP协议

目录 0.前言 1.IP协议的格式 2.IP地址 2.1IP地址的划分 国际间IP地址的划分 公有IP 私有IP 特殊的IP地址 国内IP地址的划分 2.2IP地址不足问题 2.3IP地址的功能 2.4如何使用IP地址 2.5IP地址的构成 3.网段划分 以前的方案 现在的方案 4.认识宏观网络 5.路由 …

SpringCloud config native 配置

SpringCloud config native 配置 1.概述 最近项目使用springCloud 框架&#xff0c;使用config搭建git作为配置中心。 在私有化部署中&#xff0c;出现很多比较麻烦的和鸡肋的设计。 每次部署都需要安装gitlab 有些环境安装完gitlab&#xff0c;外面不能访问&#xff0c;不给开…

QT实现升级进度条页面

一.功能说明 在Qt中实现固件升级的进度条显示窗口&#xff0c;你可以通过创建一个自定义的对话框&#xff08;Dialog&#xff09;来完成。这个对话框可以包含一个进度条&#xff08;QProgressBar&#xff09;、一些文本标签&#xff08;QLabel&#xff09;用于显示状态信息&am…