认识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 {}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web会话技术

会话:用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求和响应 会话跟踪:一种维护浏览器状态的方法&#xff0c;服务器需要识别多次请求是否来自于同一浏览器&#xff0c;…

快速入门vue3新特性和新的状态管理库pinia

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 Vue3.3新特性 defineOptions defineModel pinia 介绍 与 Vuex 3.x/4.x 的比较 安装 核心概念 定义…

ASP.NET实验室信息管理系统源码 LIMS成品源码

实验室信息管理系统&#xff08;Laboratory Information Management System&#xff09;简称LIMS系统&#xff0c;是指通过计算机对实验室的各种信息进行管理的计算机软、硬件系统&#xff0c;并将实验室的设备各种信息通过计算机网络连接起来&#xff0c;采用科学的管理思想和…

⛳ TCP 协议详解

目录 ⛳ TCP 协议详解&#x1f3a8; 一、TCP / IP 协议的分层模型&#x1f3d3; 1.1、应用层&#x1f9f8; 1.2、传输层&#x1f52e; 1.3、网络层&#x1f3af; 1.4、链路层 &#x1f3ed; 二、HTTP 报文传输原理&#x1f945; 2.1、HTTP 报文传输&#x1f48e; 2.2、封装和分…

贝锐蒲公英助力电子公交站牌联网远程运维,打造智慧出行新趋势

在现代城市公共交通系统中&#xff0c;我们随处可见电子公交站牌的身影。作为公共交通服务的核心之一&#xff0c;电子公交站牌的稳定运行至关重要&#xff0c;公交站台的实时公交状况、公共广告信息&#xff0c;是市民候车时关注的焦点。 某交通科技公司在承接某市智能电子站牌…

【Python】Web学习笔记_flask(6)——会话session对象

处理利用cookie来判断用户登录外&#xff0c;也可以使用session来判断用户是否登录 html代码和cookie对象的设置相同 from flask import Flask,request,render_template,make_response,session,url_for,redirectappFlask(__name__) app.secret_keyps1234567890 app.route(/) …

SpringBoot + Mybatis多数据源

一、配置文件 spring: # datasource: # username: root # password: 123456 # url: jdbc:mysql://127.0.0.1:3306/jun01?characterEncodingutf-8&serverTimezoneUTC # driver-class-name: com.mysql.cj.jdbc.Driverdatasource:# 数据源1onedata:jdbc-url: j…

基于X86六轮差速移动机器人运动控制器设计与实现(一)软件与硬件架构

本文研究的六轮差速移动机器人 (Six-Wheeled Differential Mobile Robot &#xff0c; SWDMR) 为了满足资源站到资源站点对点的物资运输&#xff0c;对机器人的跨越障碍能力 有较高的要求。对比传统的四轮移动机器人&#xff0c;六轮移动机器人能够提供更强的驱动 力&#…

【TypeScript】元组

元组&#xff08;Tuple&#xff09;是 TypeScript 中的一种特殊数据类型&#xff0c;它允许你定义一个固定数量和类型的元素组合。元组可以包含不同类型的数据&#xff0c;每个数据的类型在元组中都是固定的。以下是 TypeScript 中元组的基本用法和特点&#xff1a; // 声明一…

企微配置回调服务

1、企微配置可信域名 2、企微获取成员userID 3、企微获取用户敏感数据 4、企微配置回调服务 文章目录 一、简介1、概述2、相关文档地址 二、企微配置消息服务器1、配置消息接收参数2、参数解析3、参数拼接规则 三、代码编写—使用已有库1、代码下载2、代码修改3、服务代码编写 …

Linux系统下检验Tensorflow 2.xx版本和1.xx版本是否安装成功

目录 版本问题Tensorflow 1.xx的测试代码&#xff1a;Tensorflow 2.xx的测试代码&#xff1a;Tensorflow 2.6版本实际的测验结果 总结 版本问题 查询资料发现&#xff0c;多数检验Tensorflow是否安装成功的方法&#xff0c;多数方法都是1.xx版本的&#xff0c;直接使用1.xx版本…

Django的模型

定义模型 from django.db import models class User(models.Model):# 类属性是表示表的字段username models.CharField(max_length50,uniqueTrue)password models.CharField(max_length200)create_time models.DateTimeField(auto_now_addTrue) # auto_now_add新增数据时间…

【Kubernetes】Rancher管理集群

目录 1、安装 rancher 2、登录 Rancher 平台 3、Rancher 管理已存在的 k8s 集群 4、Rancher 部署监控系统 5、使用 Rancher 仪表盘管理 k8s 集群 以创建 nginx 服务为例 创建名称空间 namespace 创建 Deployment 资源 创建 service 1、安装 rancher 在 所有 node 节点下…

无代码集成飞书连接更多应用

场景描述&#xff1a; 基于飞书开放平台能力&#xff0c;无代码集成飞书连接更多应用&#xff0c;打通数据孤岛。通过Aboter可轻松搭建业务自动化流程&#xff0c;实现多个应用之间的数据连接。 支持包括飞书事件监听和接口调用的能力&#xff1a; 事件监听&#xff1a; 用…

模型预测笔记(二):结合SMOTE来进行数据不均衡处理实操

文章目录 数据不均衡危害如何解决SMOTE原理代码效果 数据不均衡危害 在模型预测中&#xff0c;数据不均衡是指不同类别的样本数量差异很大。这种情况可能会对模型的性能和结果产生一些危害&#xff1a; 偏斜的预测结果&#xff1a;由于某些类别的样本数量较少&#xff0c;模型…

vue3中使用第三方插件mitt实现任意组件通讯

vue3中使用第三方插件mitt实现任意组件通讯 组件通讯是vue3组合式开发的核心之一&#xff0c;现在我在写代码时&#xff0c;一个组件的代码超过了200行&#xff0c;基本都会拆分组件。组件拆分后&#xff0c;组件之间的通讯就很重要&#xff0c;总结了一下&#xff0c;目前有这…

Leetcode.118 杨辉三角

题目链接 Leetcode.118 杨辉三角 easy 题目描述 给定一个非负整数 n u m R o w s numRows numRows&#xff0c;生成「杨辉三角」的前 n u m R o w s numRows numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出:…

go、java、.net、C#、nodejs、vue、react、python程序问题进群咨询

1、面试辅导 2、程序辅导 3、一对一腾讯会议辅导 3、业务逻辑辅导 4、各种bug帮你解决。 5、培训小白 6、顺利拿到offer

Streamlit项目:基于讯飞星火认知大模型开发Web智能对话应用

文章目录 1 前言2 API获取3 官方文档的调用代码4 Streamlit 网页的搭建4.1 代码及效果展示4.2 Streamlit相关知识点 5 结语 1 前言 科大讯飞公司于2023年8月15日发布了讯飞认知大模型V2.0&#xff0c;这是一款集跨领域知识和语言理解能力于一体的新一代认知智能大模型。前日&a…

Python入门教程 | Python简介和环境搭建

Python 简介 Python是一种高级编程语言&#xff0c;由荷兰人Guido van Rossum于1991年创建。它以其简单易学、可读性强和丰富的生态系统而受到广泛喜爱。它被广泛应用于各个领域&#xff0c;包括Web开发、科学计算、数据分析、人工智能等。 Python的特点 简洁易读&#xff1a…