【软件测试】JUnit

news2024/10/20 12:12:19

Junit 是一个用于 Java 编程语言的单元测试框架,Selenium是自动化测试框架,专门用于Web测试

本篇博客介绍 Junit5

文章目录

  • Junit 使用
  • 语法
    • 注解
    • 参数
    • 执行顺序
    • 断言
    • 测试套件

Junit 使用

本篇博客使用 Idea集成开发环境

首先,创建新项目,注意选择 Maven

在这里插入图片描述
创建新类 —— JunitTest

在这里插入图片描述
使用 Junit 相关语法,需要添加依赖
在 pom.xml 中添加相关依赖
相关依赖可以从Maven官网获取
在这里插入图片描述

<dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.9.1</version>
</dependency>

注意重新加载 Maven,下载相应的包
至此就可以使用基本的 Junit 语法


语法

注解

Junit 使用注解来定义测试用例,设置测试环境和执行一些操作

@Test
标记一个方法为测试方法。JUnit 会自动识别并执行这个方法。

在这里插入图片描述
点击特定测试用例左侧的运行图标,可以只执行该测试用例,如 Test01 和 Test02 左侧的图标
在这里插入图片描述
点击 JunitTest ,类旁边的图标,会执行该类中的所有测试用例
在这里插入图片描述


@Disabled
使用该注解,执行全部测试用例时,会跳过执行该测试用例

在这里插入图片描述


@BeforeAll
使用该注解的方法要是 static
使用该注解的方法会在所有测试用例执行前执行,不论是单个执行还是全部执行


@AfterAll
使用该注解的方法要是 static
使用该注解的方法会在所有测试用例执行后执行,不论是单个执行还是全部执行


@BeforeEach
使用该注解的方法会在每个测试用例执行前执行


@AfterEach
使用该注解的方法会在每个测试用例执行后执行

参数

使用参数,需要引入依赖

<!-- 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>
</dependency>

使用参数要带上@ParameterizedTest

  • 单参数

使用@ValueSource指定测试用例

@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void Test04(int num){
    System.out.println("Test04 num = " + num);
}

因为有3个参数,所以会执行三次

在这里插入图片描述
同样也可以传字符串

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

在这里插入图片描述


  • CSV多参数

通过 ""指定多个参数,多组参数用分割

@ParameterizedTest
@CsvSource({"张三, 20, 男",
            "李四, 24, 男",
            "田六, 18, 女"})
void Test08(String name, int age, String gender){
    System.out.println("姓名: " + name + " 年龄: " + age + " 性别: " + gender);
}

在这里插入图片描述


  • 通过CSV文件获取参数

Junit规定,通过文件传参的文件后缀必须以.csv结尾
一行为一次测试用例输入
test01.csv
在这里插入图片描述
测试代码:

@ParameterizedTest
@CsvFileSource(resources = "test01.csv")
void Test06(String name) {
    System.out.println(name);
}

在这里插入图片描述


  • 通过方法获取参数 & 多参数
public static Stream<Arguments> Generator() {
    return Stream.of(Arguments.arguments(1, "张三"),
            Arguments.arguments(2, "李四"),
            Arguments.arguments(3, "王五")
    );
}
@ParameterizedTest
@MethodSource("Generator")
void Test07(int num, String name){
    System.out.println(num + ":" + name);
}

在这里插入图片描述

执行顺序

不指定执行顺序的情况下,除了 Before 和 After 系列,其他测试用例的执行顺序根据不同解释器不同的算法会有不同的执行顺序。
不过我们也可以指定执行顺序
方法是在测试类使用注释@TestMethodOrder,然后在测试用例使用@Order

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest {
    @Order(1)
    @Test
    void Test01(){
        System.out.println("这是JunitTest里面的Test01");
    }
    @Order(3)
    @Test
    void Test02(){
        System.out.println("这是JunitTest里面的Test02");
    }
    @Order(2)
    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3})
    void Test04(int num){
        System.out.println("Test04 num = " + num);
    }
}

通过Order指定顺序
在这里插入图片描述

断言

断言用于验证测试结果是否符合预期。JUnit 提供了多种断言方法,可以用于检查值是否相等,是否为真,是否为假等。

以下是常用的断言方法:

常用断言方法

  1. assertEquals(expected, actual)
    • 检查两个值是否相等,第一个参数是预期值,第二个是实际值
import static org.junit.Assert.assertEquals;
@Test
public void Test() {
    int sum = 2 + 3;
    Assertions.assertEquals(6, sum); // 验证 2 + 3 是否等于 6
}

结果当然是错误的,运行结果会打印出预期值和实际值方便调试
在这里插入图片描述

  1. assertTrue(condition)
    • 检查条件是否为真
import static org.junit.Assert.assertTrue;

@Test
public void testIsPositive() {
    int number = 10;
    Assertions.assertTrue(number > 0); // 验证 number 是否大于 0
}
  1. assertNull(object)
    • 检查对象是否为 null
import static org.junit.Assert.assertNull;

@Test
public void testObjectIsNull() {
    Object obj = null;
    Assertions.assertNull(obj); // 验证 obj 是否为 null
}
  1. assertArrayEquals(expectedArray, actualArray)
    • 检查两个数组是否相等
import static org.junit.Assert.assertArrayEquals;

@Test
public void testArrayEquality() {
    int[] expected = {1, 2, 3};
    int[] actual = {1, 2, 3};
    Assertions.assertArrayEquals(expected, actual); // 验证两个数组是否相等
}

上述方法都有相反的断言,如 assertEquals 相反的为 assertNotEquals

测试套件

要使用测试套件,需要添加如下两个依赖

<!-- 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>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.9.1</version>
    <scope>test</scope>
</dependency>

测试套接(Test Suite) 是一个用于组织和运行多个测试用例的集合。在软件测试中,测试套件通常用于将相关的测试用例结合在一起,以便能够方便地执行和管理

  1. 测试套件的定义

    • 测试套件 是一组测试用例的集合,可以是一个或多个测试类的集合。通过使用测试套件,可以一次性运行所有相关的测试用例,而不需要逐个运行。
    • 测试套件通常用于集成测试或系统测试,可以确保应用程序的不同部分能够协同工作。
  2. 使用测试套件的好处

    • 组织性:将相关测试组织在一起,便于管理和维护。
    • 效率:可以一次性运行多个测试,节省时间。
    • 可重用性:可以在不同的测试环境中重用测试套件。
    • 可读性:提高代码的可读性,使测试代码结构更加清晰。

介绍两种最常用的测试套件

根据 Class 运行

需要在测试类上添加注释@Suite@SelectClasses

@Suite
@SelectClasses({Test02.class, Test01.class})
public class RunTest {

}

上述代码表示,先运行 Test02 的测试用例,再运行 Test01 的测试用例
在这里插入图片描述

根据 Package 运行

需要在测试类上添加注释@Suite@SelectClasses

目录结构如下:
在这里插入图片描述

测试套件如下:

@Suite
@SelectPackages(value = {"package1", "package2"})
public class RunTest {

}

以上就是本篇博客的所有内容,感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

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

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

相关文章

【Python-AI篇】人工智能python基础-计算机组成原理

1. 计算机组成原理 2. python基础&#xff08;查漏补缺&#xff09; 2.1 字符串 2.1.1 字符串查找方法 find()&#xff1a; 检测某个字符串是否包含在这个字符串中&#xff0c;在的话返回下标&#xff0c;不在的话返回-1index()&#xff1a; 检测某个字符串是否包含在这个字…

git命令使用一览【自用】

git常见操作&#xff1a; git initgit remote add master【分支名字】 gitgits.xxxxx【仓库中获取的ssh链接或者http协议的链接】检查远程仓库是否链接成功。 git remote -v出现以下画面就可以git pull,git push了

cefsharp63.0.3(Chromium 63.0.3239.132)支持H264视频播放-PDF预览 老版本回顾系列体验

一、版本 版本:Cef 63/CefSharp63.0.3/Chromium63.0.3239.132/支持H264/支持PDF预览 支持PDF预览和H264推荐版本 63/79/84/88/100/111/125 <

Java EE规范

1、简介 Java EE的全称是Java Platform, Enterprise Edition。早期Java EE也被称为J2EE&#xff0c;即Java 2 Platform Enterprise Edition的缩写。从J2EE1.5以后&#xff0c;就改名成为Java EE。一般来说&#xff0c;企业级应用具备这些特征&#xff1a;1、数据量特别大&…

java 文件File类概述

前言 在Java中&#xff0c;File类是一个与文件和目录&#xff08;文件夹&#xff09;路径名相关的抽象表示形式。它是java.io包中的一个重要类&#xff0c;用于表示和操作文件系统中的文件和目录。 File类的基本概念 表示路径&#xff1a;File类既可以表示文件路径&#xff…

【mod分享】波斯王子遗忘之沙高清重置,纹理,字体,贴图全部重置,特效增强,支持光追

各位好&#xff0c;今天小编给大家带来一款新的高清重置MOD&#xff0c;本次高清重置的游戏叫《波斯王子&#xff1a;遗忘之沙》。 《波斯王子&#xff1a;遗忘之沙》是由育碧&#xff08;Ubisoft&#xff09;开发并发行的一款动作类游戏&#xff0c;于2010年5月18日发行。游戏…

Linux执行source /etc/profile命令报错:权限不够问(已解决)

1.问题 明明以root账号登录Linux系统&#xff0c;在终端执行命令source /etc/profile时 显示权限不够 如下图&#xff1a; 2.问题原因 可能在编辑 /etc/profile 这个文件时不小心把开头的 井号 ‘#’ 给删除了 如图&#xff1a; 这里一定要有# 3.解决办法 进入/etc/pro…

用你的手机/电脑运行文生图方案

随着ChatGPT和Stable Diffusion的发布&#xff0c;最近一两年&#xff0c;生成式AI已经火爆全球&#xff0c;已然成为移动互联网后一个重要的“风口”。就图片/视频生成领域来说&#xff0c;Stable Diffusion模型发挥着极其重要的作用。由于Stable Diffusion模型参数量是10亿参…

PHP爬虫:获取商品销量数据的利器

在电子商务的激烈竞争中&#xff0c;掌握商品销量数据是商家洞察市场动态、制定销售策略的关键。通过PHP爬虫技术&#xff0c;我们可以高效地获取这些数据&#xff0c;为商业决策提供支持。 PHP爬虫的优势 PHP作为一种流行的服务器端脚本语言&#xff0c;拥有跨平台运行、丰富…

【C++篇】类与对象的秘密(上)

目录 引言 一、类的定义 1.1类定义的基本格式 1.2 成员命名规范 1.3 class与struct的区别 1.4 访问限定符 1.5 类的作用域 二、实例化 2.1 类的实例化 2.2 对象的大小与内存对齐 三、this 指针 3.1 this指针的基本用法 3.2 为什么需要this指针&#xff1f; 3.3 t…

数据结构——链表,哈希表

文章目录 链表python实现双向链表复杂度分析 哈希表&#xff08;散列表&#xff09;python实现哈希表哈希表的应用 链表 python实现 class Node:def __init__(self, item):self.item itemself.next Nonedef head_create_linklist(li):head Node(li[0])for element in li[1…

SQL Server 2019数据库“正常,已自动关闭”

现象&#xff1a; SQL Server 2019中&#xff0c;某个数据库在SQL Server Management Studio&#xff08;SSMS&#xff09;中的状态显示为“正常&#xff0c;已自动关闭”。 解释&#xff1a; 如此显示&#xff0c;是由于该数据库的AUTO_ CLOSE选项被设为True。 在微软的官…

JavaSE——IO流1:FileOutputStream(字节输出流)、FileInputStream(字节输入流)

目录 一、IO流概述 二、IO流的分类 三、字节输出流与字节输入流 (一)字节输出流——FileOutputStream 1.FileOutputStream书写步骤 2.FileOutputStream书写细节 3.FileOutputStream写数据的3种方式 4.FileOutputStream的换行和续写 (二)字节输入流——FileInputStream…

如何给手机换ip地址

在当今数字化时代&#xff0c;IP地址作为设备在网络中的唯一标识&#xff0c;扮演着举足轻重的角色。然而&#xff0c;有时出于隐私保护、网络访问需求或其他特定原因&#xff0c;我们可能需要更改手机的IP地址。本文将详细介绍几种实用的方法&#xff0c;帮助您轻松实现手机IP…

若依框架中spring security的完整认证流程,及其如何使用自定义用户表进行登录认证,学会轻松实现二开,嘎嘎赚块乾

1&#xff09;熟悉之前的SysUser登录流程 过滤器链验证配置 这里security过滤器链增加了前置过滤器链jwtFilter 该过滤器为我们自定义的&#xff0c;每次请求都会经过jwt验证 ok我们按ctrl alt B跳转过去来看下 首先会获取登录用户LoginUser 内部通过header键&#xff0c;获…

Deep Learning

深度学习 文章目录 前言面向开发人员的 NVIDIA AI 平台每个 AI 框架 - 加速统一平台从开发到部署前言 深度学习是 AI 和机器学习的一个子集,它使用多层人工神经网络在对象检测、语音识别、语言翻译等任务中提供最先进的准确性。 深度学习与传统机器学习技术的不同之处在于,深…

python爬虫加解密分析及实现

第一种&#xff1a; 1、找到加密的接口地址&#xff0c;通过加密的接口地址全局搜索 2、通过打断点的方式&#xff0c;操作页面&#xff0c;跑到断点处时&#xff0c;即可找到加密串&#xff0c;如图二&#xff1b; 3、找到用的是哪种加密方式&#xff0c;如&#xff1a; cr…

PCL 点云配准 基于目标对称的ICP算法(精配准)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1计算点云的法线 2.1.2基于对称误差估计的ICP配准 2.1.3可视化 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总…

OpenCV高级图形用户界面(20)更改窗口的标题函数setWindowTitle()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在OpenCV中&#xff0c;cv::setWindowTitle函数用于更改窗口的标题。这使得您可以在程序运行时动态地更改窗口的标题文本。 函数原型 void cv::…

SpringBoot日常:封装redission starter组件

文章目录 逻辑实现POM.xmlRedissionConfigRedissionPropertiesRedissionUtilsspring.factories 功能测试application.yml配置POM.xmlTestController运行测试 本章内容主要介绍如何通过封装相关的redission连接配置和工具类&#xff0c;最终完成一个通用的redission starter。并…