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

认识Junit

1. 前言

2. Junit注解

2.1. 常用的注解

2.1.1. @Test

表示当前方法是一个测试方法(不需要main来执行)

@Test
void Test01() throws InterruptedException {System.out.println("测试用例1");WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com");Thread.sleep(500);webDriver.quit();
}@Test
void Test02(){System.out.println("测试用例2");
}

2.1.2. @BeforeAll

在所有测试用例开始之前运行的方法, 要用static修饰

@BeforeAll
static void SetUp(){System.out.println("开始执行@BeforeAll代码");
}

2.1.3. @AfterAll

在所有测试用例开始之后运行的方法, 要用static修饰

@AfterAll
static void TearDown(){System.out.println("开始执行@AfterAll代码");
}

2.1.4. @BeforeEach

在每个测试用例开始之前运行的方法

@BeforeEach
void beforeEach(){System.out.println("开始执行@BeforeEach代码");
}

2.1.5. @AfterEach

在每个测试用例开始之后运行的方法

@AfterEach
void AfterEach(){System.out.println("开始执行@AfterEach代码");
}

2.1.6. @Disabled

忽略当前的测试用例

@Disabled
@Test
void Test01() throws InterruptedException {System.out.println("测试用例1");WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com");Thread.sleep(500);webDriver.quit();
}

2.2. 执行顺序

2.2.1. 不同注解的执行顺序

@BeforeAll代码@BeforeEach代码测试用例1@AfterEach代码@BeforeEach代码测试用例2@AfterEach代码@BeforeEach代码...@AfterEach代码@AfterAll代码

2.2.2. 各个@Test的执行顺序

没有特定的顺序, 是Junit自己决定, 不过可以自己指定顺序

2.2.2.1. 按指定顺序执行

加上类注解@TestMethodOrder(MethodOrderer.OrderAnnotation.class)

然后给每个方法加上@Order(序号)来决定顺序

  • 按照数字从小到大执行, 数字可以不相邻, 可以为负数
  • 没有加@Order注解的, 在所有有注解执行完毕再按默认顺序执行
import org.junit.jupiter.api.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;//按指定顺序执行
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest {//忽略当前的测试用例@Disabled//@Test 表示当前方法是一个测试用例@Testvoid Test01() throws InterruptedException {System.out.println("测试用例1");WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com");Thread.sleep(500);webDriver.quit();}@Order(-1)@Testvoid Test02(){System.out.println("测试用例2");}@Order(40)@Testvoid Test03(){System.out.println("测试用例3");}@Order(30)@Testvoid Test04(){System.out.println("测试用例4");}@BeforeEachvoid beforeEach(){System.out.println("开始执行@BeforeEach代码");}@AfterEachvoid AfterEach(){System.out.println("开始执行@AfterEach代码");}@BeforeAllstatic void SetUp(){System.out.println("开始执行@BeforeAll代码");}@AfterAllstatic void TearDown(){System.out.println("开始执行@AfterAll代码");}
}

2.2.2.2. 随机顺序执行

加上类注解@TestMethodOrder(MethodOrderer.Random.class)会按随机顺序执行

此时@Order(序号)就失效了

3. Junit参数化

3.1. 单参数 @ValueSource

使用@ParameterizedTest来修饰方法, 表示这个方法有参数. 此时不能再用@Test

使用@ValueSource来传入单参数, 可以设置参数类型, 例如下面的string

strings = {"1","2","3"}代表本方法执行三次, 传入参数分别为1,2,3

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

3.2. 多参数: CSV

3.2.1. @CsvSource

使用@ParameterizedTest修饰方法

使用@CsvSource传入多个参数, 可以参照下面的代码(本方法将会执行三次)

@ParameterizedTest
@CsvSource({"1, 2", "3, 4", "5, 6"})
void Test06(String str, int num){System.out.println("str="+str+", num="+num);
}

3.2.2. @CsvFileSource

当我们需要特别多组的测试数据时, 全部写在注解里不友好,可以传入参数文件(.csv)来进行测试

使用@ParameterizedTest修饰方法

使用@CsvFileSource(resources = "csv文件路径")传入参数

右键可以让idea自动创建文件, 可以选择放在resource/Junit/xxx.csv

(其中""表示空字符串)

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

3.3. 多参数: 传入方法

使用@ParameterizedTest修饰方法

使用MethodSource("方法名")表示参数来源于哪个方法

多组数据可以用多个Arguments.arguments(参数1,参数2,...)来传递

public static Stream<Arguments> myMethod() {return Stream.of(Arguments.arguments(1,"张三"),Arguments.arguments(2, "李四"),Arguments.arguments(3, "王五"));
}
@ParameterizedTest
@MethodSource("myMethod")
void Test08(int num, String name){System.out.println("id="+num);System.out.println("name="+name);
}

4. Junit断言

断言分为: 断言相等, 断言不相等, 断言为空, 断言不为空

对于每个断言, 符合条件就没有任何提示, 不符合会报错并且之后的代码不运行

@ParameterizedTest
@ValueSource(strings = {"10"})
void Test09(String num){//断言相等:符合条件就没有任何提示, 不符合会报错并且之后的代码不运行Assertions.assertEquals(num,"10");//断言不相等Assertions.assertNotEquals(num,"11");//断言为空//Assertions.assertNull(num);//断言不为空Assertions.assertNotNull(num);
}

5. Junit测试套件

5.1. 自动启动测试

5.1.1. @SelectClasses

@SelectClasses()里面写上类名.class即可自动运行这些类

例如, 一个类时@SelectClasses(类名1Test.class)

多个类时, @SelectClasses({类名1Test.class, 类名2Test.class})

import Junit.Junit02Test;
import Junit.JunitTest;
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;@Suite
@SelectClasses({JunitTest.class, Junit02Test.class})
public class RunSuite {}

5.1.2. @SelectPackages

@SelectPackages()里写上包的完整路径名就可以自动运行包下的所有Test类

例如, 一个包时, @SelectPackages("包完整名称")

多个包时, @SelectPackages({"包1","包2"})

测试类的名称必须以Test结尾, 不然不会识别为测试类, 从而不执行

import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;@Suite
@SelectPackages("Junit")
public class RunSuite {}

相关文章:

认识Junit

1. 前言 2. Junit注解 2.1. 常用的注解 2.1.1. Test 表示当前方法是一个测试方法(不需要main来执行) Test void Test01() throws InterruptedException {System.out.println("测试用例1");WebDriver webDriver new ChromeDriver();webDriver.get("https:/…...

Unity C# 引用池 ReferencePool

Unity C# 引用池 ReferencePool 1.目的 对于多次创建的数据使用new 关键字是十分消耗性能的&#xff0c;使用完成后由GC去自动释放&#xff0c;当一个类型的数据频繁创建可以使用引用池进行管理。 2.实现 项目目录 IReference 接口 要放入引用池的数据只需要继承这个接口…...

opencv 进阶10-人脸识别原理说明及示例-cv2.CascadeClassifier.detectMultiScale()

人脸识别是指程序对输入的人脸图像进行判断&#xff0c;并识别出其对应的人的过程。人脸识别程 序像我们人类一样&#xff0c;“看到”一张人脸后就能够分辨出这个人是家人、朋友还是明星。 当然&#xff0c;要实现人脸识别&#xff0c;首先要判断当前图像内是否出现了人脸&…...

〔013〕Stable Diffusion 之 图片自动评分和不健康内容过滤器 篇

✨ 目录 🎈 下载咖啡美学评价插件🎈 咖啡美学评价使用🎈 不健康内容过滤器插件🎈 下载咖啡美学评价插件 想让系统帮你的图片作品打分评价,可以下载咖啡美学自动评价插件插件地址:https://github.com/p1atdev/stable-diffusion-webui-cafe-aesthetic也可以通过扩展列表…...

6.RocketMQ之消费索引文件ConsumeQueue

功能&#xff1a;作为CommitLog文件的索引文件。 本文着重分析为consumequeue/topic/queueId目录下的索引文件。 1.ConsumeQueueStore public class ConsumeQueueStore {protected final ConcurrentMap<String>, ConcurrentMap<Integer>, ConsumeQueueInterface…...

Appium-移动端自动测试框架,如何入门?

Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门&#xff0c;那么我们就直奔主题。文章结构如下&#xff1a; 1、为什么要使用Appium&#xff1f; 2、如何搭建Appium工具环境?(超详细&#xff09; 3、通过demo演示Appium的使用 4、Appium如何…...

复数混频器、零中频架构和高级算法开发

文章里讲解了关于射频IQ调制器、零中频架构相关的原理及技术&#xff0c;全都是干货&#xff01;其实好多同行对软件无线电的原理、IQ调制、镜像抑制都是一知半解&#xff0c;知其然不知其所以然。好好研读这篇文章&#xff0c;相信会让你有种恍然大悟的感觉。 RF工程常被视为…...

Web 拦截器-interceptor

拦截器是一种动态拦截方法调用的机制&#xff0c;类似于过滤器&#xff0c;是Spring框架提出的&#xff0c;用来动态拦截控制器方法的执行。 其作用是拦截请求&#xff0c;在指定方法调用前后&#xff0c;根据业务执行预设代码。 实现步骤 1.定义拦截器&#xff0c;实现Handl…...

Java进阶(4)——结合类加载JVM的过程理解创建对象的几种方式:new,反射Class,克隆clone(拷贝),序列化反序列化

目录 引出类什么时候被加载JVM中创建对象几种方式1.new 看到new : new Book()2.反射 Class.forName(“包名.类名”)如何获取Class对象【反射的基础】案例&#xff1a;连接数据库方法 3.克隆&#xff08;拷贝&#xff09;clone浅拷贝深拷贝案例 序列化和反序列化对象流-把对象存…...

扩散模型实战(四):从零构建扩散模型

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型实战&#xff08;二&#xff09;&#xff1a;扩散模型的发展 扩散模型实战&#xff08;三&#xff09;&#xff1a;扩散模型的应用 本文以MNIST数据集为例&#xff0c;从…...

YOLOv5、YOLOv8改进:S2注意力机制

目录 1.简介 2.YOLOv5改进 2.1增加以下S2-MLPv2.yaml文件 2.2common.py配置 2.3yolo.py配置 1.简介 S2-MLPv2注意力机制 最近&#xff0c;出现了基于 MLP 的视觉主干。与 CNN 和视觉Transformer相比&#xff0c;基于 MLP 的视觉架构具有较少的归纳偏差&#xff0c;在图像识…...

LeetCode 542. 01 Matrix【多源BFS】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

使用open cv进行角度测量

使用open cv进行角度测量 用了一点初中数学的知识&#xff0c;准确度&#xff0c;跟鼠标点的准不准有关系&#xff0c;话不多说直接上代码 import cv2 import mathpath "test.jpg" img cv2.imread(path) pointsList []def mousePoint(event, x, y, flags, param…...

java 线程池实现多线程处理list数据

newFixedThreadPool线程池实现多线程 List<PackageAgreementEntity> entityList new CopyOnWriteArrayList<>();//多线程 10个线程//int threadNum 10;int listSize 300;List<List<PackageAgreementDto>> splitData Lists.partition(packageAgre…...

Centos安装Docker

Centos安装 Docker 从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。 Docker CE 即社区免费版&#xff0c;Docker EE 即企业版&#xff0c;强调安全&#xff0c;但需付费使用。 本文介绍 Docker CE 的安装使用。 移除旧的版本&#x…...

Unity启动项目无反应的解决

文章首发见博客&#xff1a;https://mwhls.top/4803.html。 无图/格式错误/后续更新请见首发页。 更多更新请到mwhls.top查看 欢迎留言提问或批评建议&#xff0c;私信不回。 摘要&#xff1a;通过退还并重新载入许可证以解决Unity项目启动无反应问题。 场景 Unity Hub启动项目…...

2.3 opensbi: riscv: opensbi源码解析

文章目录 3. sbi_init()函数4. init_coldboot()函数4.1 sbi_scratch_init()函数4.2 sbi_domain_init()函数4.3 sbi_scratch_alloc_offset()函数4.4 sbi_hsm_init()函数4.5 sbi_platform_early_init()函数3. sbi_init()函数 函数位置:lib/sbi/sbi_init.c函数参数:scratch为每个…...

点破ResNet残差网络的精髓

卷积神经网络在实际训练过程中&#xff0c;不可避免会遇到一个问题&#xff1a;随着网络层数的增加&#xff0c;模型会发生退化。    换句话说&#xff0c;并不是网络层数越多越好&#xff0c;为什么会这样&#xff1f; 不是说网络越深&#xff0c;提取的特征越多&#xff…...

Ubuntu服务器service版本初始化

下载 下载路径 官网&#xff1a;https://cn.ubuntu.com/ 下载路径&#xff1a;https://cn.ubuntu.com/download 服务器&#xff1a;https://cn.ubuntu.com/download/server/step1 点击下载&#xff08;22.04.3&#xff09;&#xff1a;https://cn.ubuntu.com/download/server…...

re学习(33)攻防世界-secret-galaxy-300(脑洞题)

下载压缩包&#xff1a; 下载链接&#xff1a;https://adworld.xctf.org.cn/challenges/list 参考文章&#xff1a;攻防世界逆向高手题之secret-galaxy-300_沐一 林的博客-CSDN博客 发现这只是三个同一类型文件的三个不同版本而已&#xff0c;一个windows32位exe&#xff0…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...