【自动化测试】--JUnit5

news2024/12/27 11:15:24

前言

小亭子正在努力的学习编程,接下来将开启软件测试的学习~~

分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~

同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~

目录

前言

Junit5简介

什么是Junit5

JUnit5的主要特性

JUnit5的使用

注解

面试题

参数化

1.单参数:传递的是一种数据类型的参数

结果展示

2.多参数

3.CSV获取参数

4.方法获取参数:

断言

断言相等

断言不相等

断言为空

断言不为空

1.指定执行顺序

2.随机顺序执行

测试套件

1.按照指定class运行

2.指定包

添加依赖


Junit5简介

什么是Junit5

JUnit5官网

JUnit 5https://junit.org/junit5/

JUnit5是一种针对Java的单元测试框架

JUnit5= JUnit Platform + JUnit Jupiter + JUnit Vintag

简单介绍下:
Junit Platform:
用于JVM上启动测试框架的基础服务,提供命令行,IDE和构建工具等方式执行测试的支持;
JUnit Jupiter:
包含JUnit新的编程模型和扩展模型,主要就是用于编写测试代码和扩展代码;
JUnit Vintage:
用于在JUnit5中兼容运行JUnit3.x和JUnit4.x的测试用例。


JUnit5的主要特性

  • 提供全新的断言和测试注解,支持测试类内嵌;
  • •更丰富的测试方式:支持动态测试,重复测试,参数化测试等;
  • •实现了模块化,让测试执行和测试发现等不同模块解耦,减少依赖;
  • •提供对 Java 8 +版本的支持,如 Lambda 表达式,Stream API等。

JUnit5的使用

注解

这里介绍几种常用的注解

注解作用
@Test 表示当前的方法是一个测试用例
@Disable忽略当前测试用例(ignore效果一样,但是不是junit5的)
@BeforeALL所有的测试用例之前执行
@AfterALL所有的测试用例执行完之后执行
@BeforeEach 每个测试用例前执行一次
@AfterEach 每个测试用例执行之后执行一次

代码演示

public class JunitTest01 {
    @Test
    void test01(){
        System.out.println("test01");
    }
    //忽略这个测试用例
@Disabled
    @Test
    void test02(){
        System.out.println("test02");
    }
    @Test
    void test03(){
        System.out.println("test03");
    }
    //在所有测试用例前执行
    @BeforeAll
    static void before(){
        System.out.println("beforeall");
    }
    //在所有测试用例之后执行
    @AfterAll
    static void  afterall(){
        System.out.println("afterall");
    }
    //在每一个测试用例前执行
    @BeforeEach
     void beforeeach(){
        System.out.println("beforeeach");
    }
    //在每一个测试用例之后执行
    @AfterEach
  void aftereach(){
        System.out.println("aftereach");
    }

@Test
    void test04(){
            System.out.println("test04");
            }
            }

执行效果展示

面试题

BeforeEach 和 AfterEach

BeforeEach:表示方法应该在当前类中每个 @Test, @RepeatedTest, @ParameterizedTest 或 @TestFactory 方法之前执行;类似于Junit4的@Before 。即在每个单元测试之前执行,如果测试类有n个测试方法,则被执行n次;

AfterEach:

表示方法应该在当前类中每个 @Test, @RepeatedTest, @ParameterizedTest 或 @TestFactory 方法之后执行;类似于Junit4的@After 。即在每个单元测试之后执行,如果测试类有n个测试方法,则被执行n次;


参数化

@ParameterizedTest

表示方法是参数化测试,这里我们需要引入对应的依赖,这里和Junit的版本保持一致:

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

1.单参数:传递的是一种数据类型的参数

 @ValueSource

代码实现

//单参数
@ParameterizedTest
    @ValueSource(ints = {1,2,3})
    void Test04(int num){
    System.out.println(num);
}
    @ParameterizedTest
    @ValueSource(strings = {"1","2","3"})
    void Test042(String number){
        System.out.println(number);
    }

结果展示

2.多参数

 @CsvSource

代码实现

//多参数
    @ParameterizedTest
    @CsvSource({"1,2,3,''"})
    void Test02(String x,String y,String z,String q){
        System.out.println(x);
        System.out.println(y);
        System.out.println(z);
        System.out.println(q);
    }

结果展示

 注:这里最后一个参数我展示了字符为空的情况

3.CSV获取参数

  @CsvFileSource

需要创建.CSV文件【这里可能会出现编码错误,出现乱码,可以根据情况去修改idea或文本的编码设置】

创建方法 

 

代码实现

  @ParameterizedTest
    @CsvFileSource(resources = "test0301.csv")
    void Test03(int num ,String name){
        System.out.println("学号"+ num + "姓名:");
        System.out.println(name);

结果展示

4.方法获取参数:

@MethodSource

代码实现

//用方法获取参数
    @ParameterizedTest
    @MethodSource("Generator")
    void Test07(int num,String name){
        System.out.println(num+":" + name);

    }

public static Stream<Arguments> Generator(){
    return Stream.of(Arguments.arguments(1,"张三"),
            Arguments.arguments(2,"李四"),
            Arguments.arguments(3,"王五")
    );
}

结果展示


断言

断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 orgjuiit.jupiter.api.Assertions的静态方法。JUnit5内置的断言可以分成如下几个类别:检查业务逻辑返回的数据是否合理;

  • 1)assertEquals :判断两个对象或两个原始类型是否相等
  • 断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 orgjuiit.jupiter.api.Assertions的静态方法。JUnit5内置的断言可以分成如下几个类别:检查业务逻辑返回的数据是否合理;
  • 2)assertNotEquals:判断两个对象或两个原始类型是否不相等
  • 3)assertSame:判断两个对象引用是否指向同一个对象
  • 4)assertNotNull:判断给定的对象引用是否不为null

断言相等

 代码实现

@ParameterizedTest
    @ValueSource(ints = {1})
    void Test01(int num){
    System.out.println(num);
    Assertions.assertEquals(1,num);
}

结果展示

断言不相等

代码实现

//断言不相等
@ParameterizedTest
@ValueSource(ints = {1})
void Test02(int num){
    System.out.println(num);
    Assertions.assertNotEquals(2,num);
}

结果展示

断言为空

代码实现

//断言为空
@ParameterizedTest
@ValueSource(ints = {1})
void Test03(int num){
    String str = null;
    System.out.println(num);
    Assertions.assertNull(str);
}

结果展示

断言不为空

代码实现

//不为空
@ParameterizedTest
@ValueSource(ints = {1})
void Test05(int num){
   String str =" null";
    System.out.println(num);
    Assertions.assertNull(str);
}

结果展示

上述测试用例在执行的时候大家会发现不管先写哪个测试用例,最后的执行顺序不变,这是因为juniit有自己默认的执行顺序。那么,我们想指定执行顺序该怎么做呢?


1.指定执行顺序

使用  TestMethodOrder

1.按照指定顺序来执行测试用例    @Order()

代码实现

按照指定顺序来执行测试用例

// 按照指定顺序
//@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
// 按照随机顺序
@TestMethodOrder(MethodOrderer.Random.class)
public class Junit_Test1 {
    
    // 第三个执行
    @Order(3)
    @Test
    void Test01() {
        System.out.println("测试用例1");
    }
    // 第一个执行
    @Order(1)
    @Test
    void Test02() {
        System.out.println("测试用例2");
    }
    // 第二个执行
    @Order(2)
    @Test
    void Test03() {
        System.out.println("测试用例3");
    }

效果展示

2.随机顺序执行


测试套件

1)SelectClasses指定通过class运行测试套件时要选择的类

2)SelectPackages指定通过包运行测试套件时要选择的类

先建不同的包来测试


添加依赖

中央仓库地址:

Maven Repository: Search/Browse/Explore (mvnrepository.com)

添加方法:(以junit的为例演示)

1.进入网站,搜索需要的依赖

2.选择版本

 3.复制路径

4.粘贴路径

 

以上就是本文分享的主要内容,对你有帮助的话,可以点个赞哦~~

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

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

相关文章

tomcat和undertow、jetty、netty的区别

记录一下&#xff0c;最近发现的几个容器的区别 tomcat简介 Tomcat&#xff1a;免费开源&#xff0c;轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选。实际上Tomcat 部分是Apache 服务器的扩展&am…

十年历程:下定决心转向自动化测试/开发

目录 前言&#xff1a; 十年测试心路历程&#xff1a; 放弃了年薪二十万的offer&#xff0c;挑战自动化测试&#xff1a; 自动化测试心得&#xff1a; 自动化测试没用的误解&#xff1f; 关于测试开发 测试行业的现状 那么如何来全面的学习自动化测试呢&#xff1f; 前言&…

4.2 synchronized 解决方案

4.2 synchronized 解决方案 1、应用之互斥2、synchronized3、思考4、面向对象改进 1、应用之互斥 为了避免临界区的竞态条件发生&#xff0c;有多种手段可以达到目的。 阻塞式的解决方案&#xff1a;synchronized&#xff0c;Lock非阻塞式的解决方案&#xff1a;原子变量 本…

Linux网络基础 — 应用层

目录 应用层 再谈 "协议" 网络版计算器 HTTP协议 认识URL urlencode和urldecode HTTP协议格式 HTTP请求 HTTP响应 HTTP的方法 HTTP的状态码 HTTP常见Header 拓展知识&#xff08;了解&#xff09; 长链接 http周边会话保持 基本工具(http) 应用层 程序…

MOS管电源开关电路的缓启动功能是怎么实现的

先看一个电路&#xff1a; 其主要设计思路是使用MOS管来做一个开关&#xff0c;控制电源输出&#xff1b; 为什么选用MOS管&#xff1f; 这就涉及到MOS管的两个重要特性&#xff1a; 1.MOS管的导通电流大&#xff1b; 2.MOS管导通时内阻小&#xff0c;内部功耗低&#xff1b…

Probit模型、Logit模型、IV-Probit模型、IV-Probit模型

概述 Y β 1 X 1 β 2 X 2 ϵ i Y\beta_1X_1\beta_2X_2\epsilon_i Yβ1​X1​β2​X2​ϵi​ 边际效应&#xff1a;就是系数&#xff0c;即 β 1 \beta_1 β1​ 、 β 2 \beta_2 β2​ 解释&#xff1a;如&#xff0c;在控制其他变量&#xff08;条件&#xff09;不变的情况…

常用设计模式之单例模式

文章目录 饿汉式和懒汉式多线程中的懒汉式单例模式内存释放问题单例模式优缺点单例应用场景测试代码 饿汉式和懒汉式 单例模式是指在任何时候都保证只有一个类实例&#xff0c;并提供一个访问它的全局访问节点。 单例模式结构图&#xff1a; 解释&#xff1a;单例模式就是一…

罗湖区田心村旧改确认实施主体的公示,华润集团开发

深圳市罗湖区城市更新和土地整备局发布关于罗湖区笋岗街道田心村改造项目一期子项目2&#xff08;1-14、1-16、1-17地块&#xff09;确认实施主体的公示。 田心村改造项目位于罗湖区笋岗街道田心村&#xff0c;2012年4月&#xff0c;深圳市城市规划委员会建筑与环境艺术委员会2…

关于ElementPlus中的表单验证

关于ElementPlus中表单的校验规则&#xff0c;官网文档已经给出了&#xff0c;但是没有说明性文字&#xff0c;所以我想来记录一下&#xff0c;给出一些文字说明 ElementPlus中的简单校验 ElementPlus的表单的一般结构是&#xff1a; <el-form><el-form-item>&l…

(一)CSharp-Net框架

.NET框架由三部分组成&#xff1a; 1.编程工具。 2.基类库(BCL). 3.公共语言运行库(CLR) CLR 在运行时管理程序的执行&#xff0c;包括以下内容&#xff1a; 内存管理和垃圾收集。代码安全验证。代码执行、线程管理及异常处理。 NET 框架的特点以及其带来的好处&#xff1a…

web测试工程师的工作职责(合集)

web测试工程师的工作职责1 职责: 1、 负责数据平台产品的测试工作&#xff0c;参与产品需求分析&#xff0c;负责方案制定,并能预先评估项目风险&#xff0c;确保测试活动的顺利开展; 2、 深入理解系统内部的设计原理&#xff0c;并能从测试的角度提供优化意见; 3、 根据产品需…

【Linux】多线程概念初讲

线程大章节第一篇文章 文章目录 前言一、linux线程基本概念二、线程与进程的对比 1.线程控制的接口总结 前言 什么是线程呢&#xff1f; 在一个程序里的一个执行路线就叫做线程&#xff08; thread &#xff09;。更准确的定义是&#xff1a;线程是 “ 一个进程内部的控制…

Nginx+Tomcat负载均衡、动静分离,4层代理,7层代理

一&#xff1a;7层反向代理 Nginx 服务器&#xff1a;192.168.52.200:80 Tomcat服务器1&#xff1a;192.168.52.201:80 Tomcat服务器2&#xff1a;192.168.52.108:8080 192.168.52.108:8081 一.部署Nginx 负载均衡器 1.关闭防火墙 注意&#xff1a;所有的虚拟机都要注意关闭防…

硬件入门什么是之电阻

第1章 硬件入门什么是之电阻 文章目录 第1章 硬件入门什么是之电阻[TOC] 一、电阻基本概念二、电路设计实际应用1.限流( 恒流)2.分压 { 采样&#xff1a;电阻精度至少为1%}3.上拉和下拉4.分担功耗5.通信芯片的阻抗匹配 总结 一、电阻基本概念 对电流有阻碍作用的导体叫做&…

NFS(Network File System)服务搭建

NFS基础服务搭建 环境介绍:服务拓扑:nfs serverclient1临时挂载永久挂载client2临时挂载永久挂载注意事项:环境介绍: 系统全为centos7系统 使用本地yum源 服务拓扑: nfs server yum -ty install nfs-utilst rpcbind setenforce 0 mkdir /var/{world,cloud} echo -e “/va…

【Python XML】零基础也能轻松掌握的学习路线与参考资料

Python是一种广泛使用的编程语言&#xff0c;可以用来处理各种数据类型&#xff0c;并且具有广泛的应用&#xff0c;从Web开发到人工智能都能够胜任。在这样的大环境下&#xff0c;XML&#xff08;扩展标记语言&#xff09;成为了一项非常重要的数据交换格式&#xff0c;它提供…

JAVA对象头的指针压缩

JAVA对象头的指针压缩 文章目录 JAVA对象头的指针压缩对象在JVM中的内存布局对象的访问定位压缩实验实验步骤压缩策略组合压缩内容压缩后的影响指针压缩的实现 JVM内存关键大小 对象在JVM中的内存布局 在 Hotspot 虚拟机中,对象的内存布局主要由 3 部分组成&#xff1a; 对象头…

OpenMMLab AI 实战营笔记4——MMPreTrain算法库:构建高效、灵活、可扩展的深度学习模型

文章目录 摘要一、工具箱介绍二、丰富的模型三、推理API四、环境搭建——OpenMMLab软件栈五、OpenMMLab重要概念——配置文件六、代码框架七、配置及运作方式经典主干网络残差网络Vison Transformer(VIT)注意力机制自监督学习常见类型SimCLRMAE自监督学习 多模态CLIPBLIPOthers…

jvm 命令和工具

目录 堆内存分析工具 MAT ZProfiler - 线上的mat EagleEye-MProf - 命令行 命令行 线程池排查 jstack jmap -dump jmap -heap jstat 堆内存分析工具 MAT eclipse官方推出的本地内存分析工具&#xff0c;运行需要大量内存&#xff0c;从使用角度来讲&#xff0c;并不…

Mysql查询优化

Mysql查询优化器 在多种情况下,可能会导致查询结果从缓存中清除,例如:. 数据可能已被修改 您可能运行了一条语句,其文本与缓存的语句略有不同(小写/大写,换行符,...) 缓存可能已达到其大小限制之一(内存,查询计数,块等),并决定逐出您的特定查询 高速缓存碎片过多…