当前位置: 首页 > 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;因此…...

【C++11】Lambda 表达式:基本使用 和 底层原理

文章目录 Lambda 表达式1. 不考虑捕捉列表1.1 简单使用介绍1.2 简单使用举例 2. 捕捉列表 [ ] 和 mutable 关键字2.1 使用方法传值捕捉传引用捕捉 2.2 捕捉方法一览2.3 使用举例 3. lambda 的底层分析 Lambda 表达式 书写格式&#xff1a; [capture_list](parameters) mutabl…...

【网络安全---ICMP报文分析】Wireshark教程----Wireshark 分析ICMP报文数据试验

一&#xff0c;试验环境搭建 1-1 试验环境示例图 1-2 环境准备 两台kali主机&#xff08;虚拟机&#xff09; kali2022 192.168.220.129/24 kali2022 192.168.220.3/27 1-2-1 网关配置&#xff1a; 编辑-------- 虚拟网路编辑器 更改设置进来以后 &#xff0c;先选择N…...

【Docker】Docker的应用包含Sandbox、PaaS、Open Solution以及IT运维概念的详细讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…...

Java Applet基础

Java Applet基础 目录 Java Applet基础 Applet的生命周期 "Hello, World" Applet: Applet 类 Applet的调用 获得applet参数 指定applet参数 应用程序转换成Applet 事件处理 显示图片 播放音频 applet是一种Java程序。它一般运行在支持Java的Web浏览器内。因…...

【记录】IDA|IDA怎么查看当前二进制文件自动分析出来的内存分布情况(内存范围和读写性)

IDA版本&#xff1a;7.6 背景&#xff1a;我之前一直是直接看Text View里面的地址的首尾地址来判断内存分布情况的&#xff0c;似乎是有点不准确&#xff0c;然后才想到IDA肯定自带查看内存分布情况的功能&#xff0c;而且很简单。 可以通过View-Toolbars-Segments&#xff0c…...

LIMS实验室信息管理系统源码 基于计算机的数据处理技术、数据存储技术、网络传输技术、自动化仪器分析技术于一体

LIMS 是一个集现代化管理思想与基于计算机的数据处理技术、数据存储技术、网络传输技术、自动化仪器分析技术于一体&#xff0c;以实验室业务和管理工作为核心&#xff0c;遵循实验室管理国际规范&#xff0c;实现对实验室全方位管理的信息管理系统。 LIMS将样品管理、数据管理…...

有效括号相关

相关题目 20. 有效的括号 921. 使括号有效的最少添加 1541. 平衡括号字符串的最少插入次数 32. 最长有效括号 # 20. 有效的括号 class Solution:def isValid(self, s: str) -> bool:stack []for pare in s:if pare in ([{:stack.append(pare)if not stack or (pare ) and…...

浅谈泛型擦除

文章目录 泛型擦除(1)转换泛型表达式(2)转换泛型方法泛型擦除带来的问题 泛型擦除 在编码阶段使用泛型时加上的类型参数&#xff0c;会被编译器在编译阶段去掉&#xff0c;这个过程叫做泛型擦除。 泛型主要用于编译阶段。在编译后生成的Java字节码文件中不包含泛型中的类型信息…...

nodejs+vue校园跑腿系统elementui

购物车品结算,管理个人中心&#xff0c;订单管理&#xff0c;接单处理&#xff0c;商品维护&#xff0c;用户管理&#xff0c;系统管理等功育食5&#xff09;要求系统运行可靠、性能稳定、界面友好、使用方便。 第三章 系统分析 10 3.1需求分析 10 3.2可行性分析 10 3.2.1技术…...

Redis Cluster Cron调度

返回目录 说明 clusterCron 每秒执行10次clusterCron 内置了一个iteration计数器。每一次运行clusterCron&#xff0c;iteration都加1。当 iteration % 10 0的时候&#xff0c;就会随机选取一个节点&#xff0c;给它发送PING。而由于clusterCron每秒执行10次&#xff0c;所以…...

360网站怎么建设/搜索引擎入口大全

一 应用场景描述现在我需要向50数量的服务器分发Logstash新版本的rpm包&#xff0c;大概220MB左右&#xff0c;直接使用Ansible的copy命令进行传输&#xff0c;命令如下&#xff1a;ansible all -m copy -a "src/opt/software/logstash/logstash-agent-2.3.3-fb.centos6.…...

wordpress 男扮女/东莞市网站seo内容优化

微信小程序实现路径导航—使用搜索组件Searchbar 腾讯地图sdk一、搜索组件Searchbar二、腾讯地图sdk三、开发准备四、敲代码五、最终效果一、搜索组件Searchbar Searchbar是微信小程序WeUI组件库中的&#xff0c;在【微信官方文档小程序】的【扩展能力】中有详细的介绍哦&…...

免费做国际贸易的网站/免费网站推广优化

原理如下&#xff1a; 代码如下&#xff1a; import pandas as pd import numpy as np import matplotlib.pyplot as pltdef build_data():准备数据:return:准备好的数据data_list []with open(./test.txt) as f:#将所有的元素读成一个列表lines f.readlines()#循环对每一行元…...

中国企业集成网网址电子商务/网站seo优化方案项目策划书

有时&#xff0c;程序中需要判断一个字符是否是字母。可以使用正则表达式或者PHP内置函数判断。本篇只讲解判断一个字符而非字符串&#xff0c;所以以下示例中的输入参数都是一个字符。以下函数只判断一个字符是否字母&#xff0c;如果输入的是字符串可能会有异常结果&#xff…...

四川蓉和建设公司网站/长尾关键词

alpha,4α alpha,5Α beta,4β beta,5Β gamma,4γ gamma,5Γ delta,4δ delta,5Δ epsilon,4ε epsilon,5Ε zeta,4ζ zeta,5Ζ eta,4η eta,5Η theta,4θ theta,5Θ iota,4ι iota,5Ι kappa,4κ kappa,5Κ lambda,4λ lambda,5Λ mu,4μ mu,5Μ nu…...

与国外公司合作网站建设上海公司/seo课程在哪培训好

2019独角兽企业重金招聘Python工程师标准>>> 编辑/etc/mysql/my.cnf文件&#xff0c;相当于windows中的my.ini&#xff1a; 找到[client] 添加&#xff1a; default-character-set utf8 // 默认字符集为utf8 找到[mysqld] 添加: default-character-set utf8 //默认…...