【测试学习】Junit5的简单使用

news2024/9/29 23:22:29

目录

🌟需要知道:

🌟Junit学习

🌈1、常用的注解

🌈2、测试用例的执行顺序

🌈3、参数化

🌈4、断言

🌈5、测试套件


🌟需要知道:

问题1:Selenium与Junit之间的关系?

        就像雷锋和雷峰塔的关系,就是没关系。

问题2:为什么学习了Selenium之后还要学习Junit?

        Junit是针对java的一个单元测试框架,实际中通常是通过一个自动化测试框架搭配对应的一个单元测试框架来对测试用例进行管理。如果Selenium编写的自动化测试用例是灯,Junit就是控制灯怎么去亮,灯亮的颜色是什么颜色,灯亮的顺序是什么等。


🌟Junit学习

需要在Pom.xml文件中引入依赖:写在dependencies下面:

<!-- 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.1</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.1</version>
            <scope>test</scope>
        </dependency>

🌈1、常用的注解

之前的代码实现方式:在main函数中调用。现在可不可以不需要直接调用test01(),这就可以使用注解实现。

案例1:@Test的使用:

(1)不需要main方法调用;

(2)表示注解的:@Test,@BeforeAll,@AfterAll,@BeforeEach,@AfterEach

(3)@Test是一个注解,表示当前的方法是一个测试用例;

(4)注意:返回值必须是void,是规定的;

(5)要执行两个测试用例,点class前面的那个箭头;如果点的是Test01前面的箭头,表示只执行这一个测试用例;

(6)Test01,Test02都是自定义的名字。

public class a01_JunitTest {
    @Test
    void Test01(){
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
    }

    @Test
    void Test02(){
        System.out.println("这是第二个测试用例");
    }
}

指向结果:先打开百度,再打印Test02中的语句。


案例2:@BeforeAll与@AfterAll:执行一次

(1)当前类里面所有的测试用例执行之前都会执行这个方法@BeforeAll;

(2)当前类里面所有的测试用例执行结束之后都会执行这个方法@AfterAll。

public class a02_BeforeAll {
    //1、当前类里面所有的测试用例执行之前都会执行这个方法
    @BeforeAll
    static void setUp(){
        System.out.println("开始执行@BeforeAll修饰的方法");
    }

    @Test
    void Test(){
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
    }

    //2、当前类里面所有的测试用例执行结束之后都会执行这个方法
    @AfterAll
    static void TearDown(){
        System.out.println("开始执行@AfterAll对应的方法");
    }
}

执行结果:


案例3:@BeforeEach与@AfterEach

当前类里面有两个测试用例:

(1)AfterAll和BeforeAll会执行一次;不论有几个测试用例,都只执行一次;

(2)AfterEach和BeforeEach会分别执行两次;有几个测试用例执行几次。

1、在执行每个方法之前都会执行一下BeforeEach方法;

2、在每个方法执行之后都会执行AfterEach方法。

public class a03_BeforeEach {
    //1、在执行每个方法之前都会执行一下BeforeEach方法
    @BeforeEach
    void BeforeEachTest(){
        System.out.println("执行BeforeEach");
    }

    @Test
    void Test01(){
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
    }

    @Test
    void Test02(){
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.csdn.net/");
    }

    //2、在每个方法执行之后都会执行AfterEach方法
    @AfterEach
    void AfterEachTest(){
        System.out.println("执行AfterEach");
    }
}


案例4:@Disabled

(1)有两个测试用例,只执行Test02,不执行Test01 ;

(2)在要忽略执行的方法前面写@Disabled。

public class a04_Disable {
    @Disabled
    @Test
    void Test01(){
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
    }

    @Test
    void Test02(){
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.csdn.net/");
    }
}

执行结果:

🌈2、测试用例的执行顺序

情况1:执行顺序12345

 情况2:将Testt05放在最前面,执行顺序12345

 方式1:按照执行顺序执行(搭配Order使用)

(1)在类前面加上注解@TestMethodOrder(MethodOrderer.OrderAnnotation.class);

(2)指定执行规则:在每个测试用例前面加上注解: @Order(顺序)。

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class a05_Test {
    @Order(1)
    @Test
    void Test05(){
        System.out.println("这是测试用例5");
    }

    @Order(5)
    @Test
    void Test01(){
        System.out.println("这是测试用例1");
    }

    @Order(4)
    @Test
    void Test02(){
        System.out.println("这是测试用例2");
    }

    @Order(3)
    @Test
    void Test03(){
        System.out.println("这是测试用例3");
    }

    @Order(2)
    @Test
    void Test04(){
        System.out.println("这是测试用例4");
    }
}

方式2:按照随机方式执行:(不常用)

在类前面加上@TestMethodOrder(MethodOrderer.Random.class)

@TestMethodOrder(MethodOrderer.Random.class)
public class a05_Test { 
    @Test
    void Test05(){
        System.out.println("这是测试用例5");
    }

    @Test
    void Test01(){
        System.out.println("这是测试用例1");
    }

    @Test
    void Test02(){
        System.out.println("这是测试用例2");
    }

    @Test
    void Test03(){
        System.out.println("这是测试用例3");
    }

    @Test
    void Test04(){
        System.out.println("这是测试用例4");
    }
}

执行结果是随机的: 

🌈3、参数化

错误演示:

1、单参数

(1)@ParameterizedTest进行参数的注册;

(2)单参数的形式:在前面写:@ValueSource:点进去源码观察可以是各种类型传递。

 代码演示:

2、多参数

        可以看出单参数的特点:如果要传递String,那么所有的参数都是String类型。但是如果我现在想要第一个参数是String,第二个参数是Int,那么就要使用多参数的形式了。

(1)csv参数传递

方式1:@CsvSource

 当数据非常多的时候,我们一般采用第二种方式:

方式2:通过新建csv文件传递

 如果要传递的csv文件中的内容:姓名为空的话,直接写为‘ ’即可。

 (2)在有些情况下,有些参数可能需要某些对应的方法来对参数进行处理,因此就有第二种方法,通过方法将参数处理,再传入测试用例中。简单使用如下:

🌈4、断言

在java中判断通过if-else来判断,这里我们通过断言来实现。

🌈5、测试套件

        要解决的问题:现在有a01,a02,a03...a10一共10个class文件都要执行,正常操作是如果要执行a10,点击a10,执行a9,点击a9...以此类推。但是这样很麻烦,因此通过测试套件,一次性将所有的代码都执行。

 写法1:通过指定相应的class来执行

用法:

执行结果:

写法2:通过指定包来执行

用法:

 执行结果:先执行包1中的a01,a02,然后执行包2中的a01。


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

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

相关文章

ATA-4315高压功率放大器在铁路钢轨损伤检测中的应用

随着高速铁路的建设和不断发展&#xff0c;确保铁路线路的安全和稳定运行变得越来越重要。钢轨作为铁路的重要组成部分&#xff0c;其损坏可能导致严重的事故和交通堵塞。因此&#xff0c;对钢轨损伤进行及时、准确的检测至关重要。高压功率放大器作为一种精密的测试仪器&#…

SQL 优化(一):慎用 SQL 函数

假如有下面这样一张用户表 CREATE TABLE t_user (user_id int(11) NOT NULL AUTO_INCREMENT,username varchar(50) DEFAULT NULL,sex tinyint(1) DEFAULT NULL,mobile varchar(45) DEFAULT NULL,create_time datetime DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (user_id),KEY id…

Linux系统下查看网卡配置和网络流量监控指令:ifconfig、ethtool

文章目录 1 查看/设置网卡&#xff08;ifconfig&#xff09;2 查看网卡配置、属性&#xff08;ip、ethtool&#xff09;3 查看网络接口配置情况&#xff1a;4 查看网络接口属性信息5 测试网路通信&#xff08;ping&#xff09; 6 查看具体网卡配置文件 1 查看/设置网卡&#xf…

Unity | HDRP高清渲染管线学习笔记:Lightmapping(光照烘焙)与Lightmap(光照贴图)

目录 相关概念 1.渐进式光照贴图烘焙 1.1 渐进式光照贴图烘焙对模型的要求 1.2 渐进式光照贴图烘焙对硬件的要求 1.3 渐进式光照贴图烘焙支持的Unity渲染管线 1.4 进行渐进式光照贴图烘焙结果 1.5 渐进式光照贴图烘焙的CPU版本和GPU版本 1.6 Lighting窗口Lightmapping …

2023MWC上海|平行云邀您一起聊聊“未来数字世界中的社交,游戏与娱乐”

“世界移动通信大会&#xff08;MWC上海&#xff09;&#xff0c;自2012年落户上海以来已经举办9届&#xff0c;是中国乃至亚太区域移动产业向世界展示最新发展成果与发展战略的关键平台。2023年MWC上海将于2023年6月28-30日在上海新国际博览中心举行&#xff0c;主题是“时不我…

Spring 更简单的读取和存储对象、使用注解存取对象

文章目录 1.前言2.存储 Bean对象2.1 前置任务&#xff1a;配置扫描路径&#xff08;重中之重&#xff09;2.2 添加注解存储 Bean 对象2.2.1 类注解2.2.2 方法注解 Bean 3.获取 Bean对象3.1 属性注入3.2 构造方法注入3.3 Setter 注⼊3.4 三种注释的优缺点3.5 另⼀种注⼊关键字&a…

python学习——时间序列

目录 1 生成时间1.1 pd.Timestamp1.2 pd.to_datetime 最常用1.2.1 单个转换为时间戳1.2.2 多个时间转换为时间戳1.2.3 日期在前 dayfirst1.2.4 处理特殊格式 format1.2.5 处理无效时间 errors1.2.6 和timestamp互转 1.3 固定跨度时间的生成 pd.date_range 2 时间格式转换 .dt.s…

AI工具在不同领域的应用范围分享,让我们一起了解

随着人工智能技术的不断发展&#xff0c;越来越多的领域开始应用AI工具来解决问题、提高效率和创造力。无论是在医疗、金融、教育还是其他行业&#xff0c;AI工具都展现出了巨大的潜力和价值。今天&#xff0c;我将分享一些常见的AI工具在不同领域的应用范围&#xff0c;让我们…

Consul:什么是Consul? ①

一、思想 微服务、分布式应用的特点就是拆分&#xff0c;拆分带来的问题就是服务器数量成倍增多&#xff0c;两个很重要的原因&#xff0c;需要抽离出来一个项目专门管理这些服务信息。 1、对信息的管理思想&#xff0c;统一化、中心化一直是一套比较常规成熟的标准。 2、并且它…

开源工具系列8:Spring Security

Spring Security 是一套认证授权框架, 支持认证模式如 HTTP BASIC 认证头 (基于 IETF RFC-based 标准), HTTP Digest 认证头 ( IETF RFC-based 标准), Form-based authentication (用于简单的用户界面), OpenID 认证等, Spring Security使得当前系统可以快速集成这些验证机制亦…

Matplotlib---等高线图

1. 等高线图 等高线图&#xff1a;也称水平图&#xff0c;是一种在二维平面上显示 3D 图像的方法。 x np.linspace(-5, 5, 100) y np.linspace(-5, 5, 100)# 将上述数据变成网格数据形式 X, Y np.meshgrid(x, y)# 定义Z与X, Y之间的关系 Z np.sqrt(X**2 Y**2)# 画等高线…

Win11 系统Java17的安装教程:最新版JDK 17.07下载、安装、卸载详解

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

如何利用AI高效率快速调色

在设计行业中&#xff0c;时间是非常宝贵的资源&#xff0c;而设计师们常常需要应对繁忙的工作日程和紧迫的截止日期。为了提高工作效率和节省时间&#xff0c;越来越多的设计师开始利用人工智能&#xff08;AI&#xff09;技术中的高效调色功能。本文将介绍如何利用AI高效率快…

震惊!国产AI模特已经可以做到这个程度了,未来可期

自从GhatGPT火了之后 AI就成为网络热词 并且渗透到各行各业中 你敢相信下面这些图模特图 竟然都是AI生成的&#xff01; 简直不要太逼真 这次AI真的可以取代一部分模特了 假人模特 神采PromeAI生成 神采PromeAI生成 从生成效果来看 AI模特已非常接近真人 对于电商企业或…

springboot开发PC端桌面应用

一、需求描述&#xff1a; 1、要求桌面能在window、Linux和macos系统上运行 2、用户自定义数据筛选策略&#xff0c;策略可通过excel导入导出 3、选择多个excel文件通过策略过滤生成新的excel 二、技术选型及集成环境配置&#xff1a; 1、PC端跨平台直接选用javafx来作为桌…

go实现的简单压测工具

1、参数概览 依赖github.com/ddliu/go-httpclient进行http接口请求 依赖github.com/antlabs/pcurl解析curl 输入参数&#xff1a; -c&#xff0c;concurrency&#xff0c;并发数&#xff0c;启动协程数-n&#xff0c; totalNumber&#xff0c;单个协程发送的请求个数-u&…

Zookeeper源码解析(上)

序&#xff1a; Zookeeper最早起源于雅虎研究院的一个研究小组&#xff0c; 在当时&#xff0c; 研究人员发现&#xff0c;在雅虎内部有很大大型的系统都是需要一个依赖一个类似的系统来进行分布式协调&#xff0c;但是在系统往往都存在分布式单点问题&#xff0c;所以雅虎的开…

佩戴舒适度极好的蓝牙耳机推荐,五款佩戴舒适的蓝牙耳机推荐

​说到真无线蓝牙耳机&#xff0c;很多人会问音质表现好不好&#xff0c;佩戴上耳舒适性怎么样&#xff1f;等等问题。面对这些常会问的问题&#xff0c;我总结出来&#xff0c;也整理出来几款质量好、佩戴舒适的蓝牙耳机给大家&#xff0c;来看看有哪些。 一、南卡OE PRO开放…

安装SSL证书会拖慢网站访问速度吗?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言什么是SSL证书SSL证…

Python程序设计基础:程序流程控制(一)

文章目录 一、条件表达式1、关系运算符2、逻辑运算符3、条件表达式 二、选择结构1、单分支结构if语句2、双分支结构if-else语句3、多分支结构if-elif-else语句4、嵌套的if结构 一、条件表达式 程序流程的基本结构主要有三种&#xff0c;顺序结构、选择结构和循环结构&#xff…