当前位置: 首页 > news >正文

Junit的常用操作

注:本篇文章讲解的是junit5

 

目录

Juint是什么

Juint需要导入的依赖

Juint常用注解

 Junit执行顺序

 参数化

断言

测试套件


Juint是什么

Juint 是 Java 的一个单元测试框架. 也是回归测试框架. 使用 Junit 能让我们快速的完成单元测试。

注意:Junit 测试也是程序员测试,即白盒测试,它需要程序员知道被测试的代码如何完成功能,以及完成什么样的功能

Juint需要导入的依赖

本篇文章junit代码需要的依赖, 这里给大家贴出来

<!--junit依赖-->
<!--        api--><!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.9.2</version></dependency><!--        参数化需要的--><!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><version>5.9.2</version></dependency><!--        测试套件--><!-- 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></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></dependency>

Juint常用注解

@Test: 在类上注解,i表名当前类是一个测试用例

@BeforeAll: 一个类中,所有方法执行之前会执行一次

@AfterAll: 一个类中,所有方法执行结束会执行一次

@BeforeEach: 每个方法执行执行都会执行一次这个方法

@AfterEach: 每个方法执行结束之后都会执行一次这个方法

@BeforeAll @AfterAll 与 @BeforeEach @AfterEach 区别在于

@BeforeAll @AfterAll 

修饰的方法是static void的,也就是说是属于类的,在一个类中一共只会执行一次

@BeforeEach @AfterEach

修饰的方法是void的,会在类中的每个方法执行 之前/之后 都会执行一次

还有一个常用方法是:

@Disabled: 忽略当前测试用例,不执行 

public class junit1 {@Testvoid test1(){WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");}@Disabled //忽略当前测试用例,不执行@Testvoid test2(){System.out.println("测试用例2");}@Testvoid test10(){System.out.println("测试用例10");}@BeforeAllstatic void test3(){System.out.println("类前置");}@AfterAllstatic void test4(){System.out.println("类后置");}@BeforeEachvoid test5(){System.out.println("方法前置");}@AfterEachvoid test6(){System.out.println("方法后置");}}

通过这个执行结果也可以清晰的看到执行的顺序  以及执行的次数

 Junit执行顺序

那么如果方法多了,哪个方法优先执行呢?

默认顺序由方法名hashcode值来决定,如果hash值大小一致,则按名字的字典顺序确定

由于hashcode的生成和操作系统相关(以native修饰),所以对于不同操作系统,可能会出现不一样的执行顺序,在某一操作系统上,多次执行的顺序不变.

我们也可以进行设置:

设置有两种方式:按照指定顺序执行  /  按照随机顺序执行,不可以同时存在

//声明按照指定顺序进行执行
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
//随机顺序执行
//@TestInstance(MethodOrderer.Random.class)//不可以同时存在
public class junit {@Order(2)@Testvoid test1(){WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");}@Disabled //忽略当前测试用例,不执行@Testvoid test2(){System.out.println("测试用例2");}@Order(5)@Testvoid test10(){System.out.println("测试用例10");}@Order(4)@Testvoid test11(){System.out.println("测试用例11");}@Order(8)@Testvoid test12(){System.out.println("测试用例12");}@Order(1)@Testvoid test13(){System.out.println("测试用例13");}@BeforeAllstatic void test3(){System.out.println("类前置");}@AfterAllstatic void test4(){System.out.println("类后置");}@BeforeEachvoid test5(){System.out.println("方法前置");}@AfterEachvoid test6(){System.out.println("方法后置");}}

执行结果就是按照我们设置的顺序进行执行的, 设置的数字顺序可以不连续, 可以为负数,

他会按照从小到大的顺序进行执行:

 参数化

单参数

多参数: 1. cvs 传参   2. 方法传参

//参数传递 
public class junit2 {public static Stream<Arguments> m1() {return Stream.of(Arguments.arguments("1,zhang","2,lissss","3,wang","4,lisi"));}//单参数//    @Test@ParameterizedTest//不可以和Test同时存在@ValueSource(strings = {"1","2","3"})void test10(String str){System.out.println(str);}//多参数 Csv1@ParameterizedTest@CsvSource({"1,2","s,3"})void test(String s,int n){System.out.println(s+" "+n);}//多参数 Csv2@ParameterizedTest@CsvFileSource(resources="test1.csv")void test2(int id,String name){System.out.println(id+" " +name);}//使用方法进行多参数传递@ParameterizedTest@MethodSource("m1")void test3(String id,String name){System.out.println(id+" "+name);}}

断言

//断言@ParameterizedTest@ValueSource(strings={"1"})void test4(String s){//断言相等Assertions.assertEquals(s,"1");//断言不相等Assertions.assertNotEquals(s,2);//断言为空Assertions.assertNull(s);//断言不为空Assertions.assertNotNull(s);}

测试套件

Junit是怎么进行管理测试用例的呢?

就是通过测试套件.

1.以类为单位进行执行

@Suite
@SelectClasses({junit.class,junit2.class})
public class suit1 {
}

2.以包为单位进行执行

@Suite
@SelectPackages({"org.example.junit1","org.example.junit2"})
public class suit1 {}

相关文章:

Junit的常用操作

注:本篇文章讲解的是junit5 目录 Juint是什么 Juint需要导入的依赖 Juint常用注解 Junit执行顺序 参数化 断言 测试套件 Juint是什么 Juint 是 Java 的一个单元测试框架. 也是回归测试框架. 使用 Junit 能让我们快速的完成单元测试。 注意&#xff1a;Junit 测试也是程序…...

Elasticsearch安装并使用Postman访问

Elasticsearch&#xff0c;一个强大的开源搜索和分析引擎&#xff0c;已经在全球范围内被广泛应用于各种场景&#xff0c;包括网站搜索、日志分析、实时应用等。由于其强大的功能和灵活性&#xff0c;Elasticsearch 已经成为大数据处理的重要工具。然而&#xff0c;对于许多初次…...

Pytorch深度学习训练模型保存问题,找不到保存路径

执行torch.save(net.state_dict(), save_path_pth)报错&#xff1a; RuntimeError: Parent directory D:\xxxxxxxxxxx\weights does not exist. 将文件路径的中文改成全英文就可以了。 注意&#xff1a;这个代码在torch1.7版本无报错&#xff0c;但是在1.13.1版本报错。在linu…...

数据结构与算法之堆: Leetcode 23. 合并 K 个升序链表 (Typescript版)

合并 K 个升序链表 https://leetcode.cn/problems/merge-k-sorted-lists/ 描述 给你一个链表数组&#xff0c;每个链表都已经按升序排列请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表 示例 1 输入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]] 输出&…...

代码随想录算法训练营第五十七天 | 392.判断子序列 115.不同的子序列

1. 判断子序列 392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; dp[i][j] 表示以下标i-1为结尾的字符串s&#xff0c;和以下标j-1为结尾的字符串t&#xff0c;相同子序列的长度。 class Solution {public boolean isSubsequence(String s, String t) {//dp[i][j] 表示…...

Kafka日志索引详解以及生产常见问题分析与总结

文章目录 1、Kafka的Log日志梳理1.1、Topic下的消息是如何存储的&#xff1f;1.1.1、 log文件追加记录所有消息1.1.2、 index和timeindex加速读取log消息日志。 1.2、文件清理机制1.2.1、如何判断哪些日志文件过期了1.2.2、过期的日志文件如何处理 1.3、Kafka的文件高效读写机制…...

vue中 css scoped原理

Vue中css的逻辑是先放子组件&#xff0c;然后放父组件&#xff0c;所以同样的css类名&#xff0c;子组件会被父组件覆盖 html 如下 子被父覆盖 scoped是通过给组件加hash值&#xff0c;锁定组件。 父子组件均scoped的情况下&#xff0c;子仍会覆盖 还是被覆盖了 如何避免被…...

tf.compat.v1.global_variables()

tf.global_variables tf.global_variables() 是 TensorFlow 1.x 中的一个函数&#xff0c;它返回图中所有的全局变量。在 TensorFlow 2.x 中&#xff0c;这个函数已经被移除了&#xff0c;取而代之的是 tf.compat.v1.global_variables()。 然而&#xff0c;在 TensorFlow 2.x …...

登录注册实现

一、前端页面注册到Vue 1.创建登录和注册组件 <template><div>login</div></template><script> export default {name: HomeView,data() {return {}},methods: {}, } </script><template><div>register</div></tem…...

Push rejected: Push to origin/master was rejected

Push rejected: Push to origin/master was rejected 原因&#xff1a;推拒绝&#xff1a;推送到起源/主人被拒绝 解决方案如下&#xff1a; 方案1&#xff1a; 1.在Idea打开终端 方案2&#xff1a; 1、在对应项目文件里打开 Git Bash 然后依次输入&#xff1a; git pull …...

在线OJ项目核心思路

文章目录 在线OJ项目核心思路1. 项目介绍2.预备知识理解多进程编程为啥采用多进程而不使用多线程?标准输入&标准输出&标准错误 3.项目实现题目API实现相关实体类定义新增/修改题目获取题目列表 编译运行编译运行流程 4.统一功能处理 在线OJ项目核心思路 1. 项目介绍 …...

Spring MVC:数据绑定

Spring MVC 数据绑定数据类型转换数据格式化数据校验 附 数据绑定 数据绑定&#xff0c;指 Web 页面上请求和响应的数据与 Controller 中对应处理方法上的对象绑定&#xff08;即是将用户提交的表单数据绑定到 Java 对象中&#xff09;。 过程如下&#xff1a; ServletRequest…...

STM32CubeMX学习笔记-USB接口使用(HID按键)

STM32CubeMX学习笔记-USB接口使用&#xff08;HID按键&#xff09; 一、USB简介1.1 USB HID简介 二、新建工程1. 打开 STM32CubeMX 软件&#xff0c;点击“新建工程”2. 选择 MCU 和封装3. 配置时钟4. 配置调试模式 三、USB3.1 参数配置3.2 引脚配置3.3 配置时钟3.4 USB Device…...

C#,数值计算——Ranq2的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Backup generator if Ranq1 has too short a period and Ran is too slow.The /// period is 8.5E37. Calling conventions same as Ran, above. /// </summary> …...

C/C++ 数据结构 - 链表

1.单链表 https://blog.csdn.net/qq_36806987/article/details/79858957 1 #include<stdio.h>2 #include<stdlib.h>3 4 /*结构体部分*/5 typedef struct Node6 {7 int data; //数值域8 struct Node *next; //指针域9 }N;10 11 N *Init() //初始化单…...

【算法基础】一文掌握十大排序算法,冒泡排序、插入排序、选择排序、归并排序、计数排序、基数排序、希尔排序和堆排序

目录 1 冒泡排序&#xff08;Bubble Sort&#xff09; 2 插入排序&#xff08;Insertion Sort&#xff09; 3 选择排序&#xff08;Selection Sort&#xff09; 4. 快速排序&#xff08;Quick Sort&#xff09; 5. 归并排序&#xff08;Merge Sort&#xff09; 6 堆排序 …...

javascript二维数组(3):指定数组元素的特定属性进行搜索

js中对数组&#xff0c; var data [{“name”: “《西游记》”, “author”: “吴承恩”, “cat”: “A级书刊”, “num”: 3},{“name”: “《三国演义》”, “author”: “罗贯中”, “cat”: “A级书刊”, “num”: 8},{“name”: “《红楼梦》”, “author”: “曹雪芹”,…...

使用Qt进行HTTP通信的方法

文章目录 1 HTTP协议简介1.1 HTTP协议的历史和发展1.2 HTTP协议的特点1.3 HTTP的工作过程1.4 请求报文1.5 响应报文 2 使用Qt进行HTTP通信2.1 Qt的HTTP通信类2.2 HTTP通信过程 3 JSON3.1 cJSON库简介3.2 cJSON库的设计思想和数据结构3.3 cJSON库的使用方法 1 HTTP协议简介 1.1…...

第45节——页面中修改redux里的数据

一、什么是action 在 Redux 中&#xff0c;Action 是一个简单的 JavaScript 对象&#xff0c;用于描述对应应用中的某个事件&#xff08;例如用户操作&#xff09;所发生的变化。它包含了一个 type 属性&#xff0c;用于表示事件的类型&#xff0c;以及其他一些可选的数据。 …...

软考 系统架构设计师系列知识点之软件架构风格(2)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之软件架构风格&#xff08;1&#xff09; 这个十一注定是一个不能放松、保持“紧”的十一。由于报名了全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff0c;11月4号就要考试&#xff0c;因此…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...