【软件测试】JUnit

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 {

}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】评价指标

https://zhuanlan.zhihu.com/p/479060683 https://blog.csdn.net/fyfugoyfa/article/details/136414958 Confusion Matrix&#xff0c;是一个用来衡量模型好坏的统计量&#xff0c;其中Accuracy&#xff0c;Precision&#xff0c;F1 score&#xff0c;Recall&#xff0c;ROC曲线…

[SAP ABAP] SE11定义数据类型(结构与表类型)

1.定义结构 使用事务码SE11创建数据类型(结构)&#xff0c;输入自定义的数据类型名称&#xff0c;点击创建按钮 勾选结构并点击确定按钮 填写简短描述&#xff0c;并在"组件"页签上添加相关字段信息&#xff0c;点击激活按钮即可生效该结构ZSPO_HEADER_437 2.定义表…

企业网站设计之网站结构设计

创意主题网站的结构设计更是需要更为精心的策划和执行&#xff0c;以确保吸引并保持用户的注意力。以下是创意主题网站结构设计的关键要素&#xff1a; 1. 目标明确的导航栏 导航栏是用户进入网站并浏览内容的入口。在创意主题网站中&#xff0c;导航栏的设计要突显网站的主…

【大数据算法】一文掌握大数据算法之:大数据算法分析技术。

大数据算法分析技术 1、引言2、 大数据分析技术2.1 时间/空间复杂度2.2 I/O 复杂度2.3 结果质量2.4 通信复杂度 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;最近更文有些不频繁了哈。 小鱼&#xff1a;这一个月不见&#xff0c;你这说话方式也变了。 小屌丝&#xff…

Electron-(一)创建桌面应用

一、概述 本文通过核心步骤介绍&#xff0c;形成使用Electron进行桌面应用创建的概述性内容。 在当今的软件开发领域&#xff0c;Electron 作为一款强大的工具&#xff0c;为开发者提供了一种便捷的方式来创建跨平台的桌面应用。本文将通过详细介绍核心步骤&#xff0c;带您领…

PPT自动化:掌握 python-pptx 的基础元素

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 PPT 📒📝 什么是 Slide?📝 了解 Shape📝 深入 Paragraph📝 探索 Run⚓️ 相关链接 ⚓️📖 介绍 📖 初学python-pptx,掌握 python-pptx 与 PPT 元素的对应关系是至关重要的一步。今天,我们一起来了解一下 PPT 中…

Python基于OpenCV的实时疲劳检测

2.检测方法 1&#xff09;方法 与用于计算眨眼的传统图像处理方法不同&#xff0c;该方法通常涉及以下几种组合&#xff1a; 1、眼睛定位。 2、阈值找到眼睛的白色。 3、确定眼睛的“白色”区域是否消失了一段时间&#xff08;表示眨眼&#xff09;。 相反&#xff0c;眼睛长…

【Redis】数据结构(中)----ZipList(压缩列表)

文章目录 ZipList(压缩列表)概念ZipList的结构Entry的内部结构previous_entry_lengthEncoding存储字符串存储整数 content ZipList会存在的问题查询中间数据连锁更新 总结 ZipList(压缩列表) 概念 ZipList是一种特殊的"双端链表",由一系列特殊编码的连续内存块组成…

解决Git拉取项目后右侧边栏无Maven的问题

从gitlab上拉取新项目&#xff0c;当你配置好maven仓库地址&#xff0c;配置文件&#xff0c;各种库都配置好了&#xff0c;但是没有Maven&#xff0c;找不到下图的package因此打包不了项目解决办法 非常简单&#xff0c;只需一步&#xff01; 右击项目里面的pom.xml,再点击add…

uniapp小程序自定义聚合点

注&#xff1a; 1.默认的聚合点可以点击自动展示子级点位&#xff0c;但是自定义的聚合点在ios上无法触发markerClusterClick的监听&#xff0c;至今未解决&#xff0c;不知啥原因 2.ios和安卓展示的点位样式还有有差别 源码附上 <template><view class"marke…

算法——python实现归并排序

文章目录 归并排序NB三人组总结 归并排序 """ 归并排序 """""" 时间复杂度 &#xff1a; O(N*logN) 空间复杂度 &#xff1a; O(N) 需要额外生成一个临时变量&#xff0c;最大是N长 思路&#xf…

[Linux网络编程]03-TCP协议

一.TCP协议数据通信的过程 TCP数据报如下&#xff0c;数据报中的标志位双端通信的关键。 三次握手: 1.客户端向服务端发送SYN标志位&#xff0c;请求建立连接&#xff0c;同时发送空包 2.服务端向客户端回发ACK标志位(即确认标志位&#xff0c;任何一端发送数据后都需要另一端…

Nginx UI 一个可以管理Nginx的图形化界面工具

Nginx UI 是一个基于 Web 的图形界面管理工具&#xff0c;支持对 Nginx 的各项配置和状态进行直观的操作和监控。 Nginx UI 的功能非常丰富&#xff1a; 在线查看服务器 CPU、内存、系统负载、磁盘使用率等指标 在线 ChatGPT 助理 一键申请和自动续签 Let’s encrypt 证书 在…

[JAVAEE] 线程安全问题

目录 一. 什么是线程安全 二. 线程安全问题产生的原因 三. 线程安全问题的解决 3.1 解决修改操作不是原子性的问题 > 加锁 a. 什么是锁 b. 没有加锁时 c. 加锁时 d. 死锁 e. 避免死锁 3.2 解决内存可见性的问题 > volatile关键字 (易变的, 善变的) a. 不加…

C++ string的精讲

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目&#xff1a;C知识点的补充_Jason_from_China的博客-CSDN博客 前言 string是标准库中的一个类&#xff0c;它位于<string>头文件中。这个类提供…

Python算法——链表(反转链表,合并两个排序链表,判断是否有环,链表中倒数最后k个结点,第一个公共结点,删除重复元素)

哈喽大家好&#xff0c;好久不见&#xff01;又进入新的一个学期&#xff0c;这学期小编要进行python的算法学习啦&#xff0c;今天更新链表的部分题目~ 牛客 NC78 反转链表 题目如下&#xff1a; 算法思想如下&#xff1a; 1.初始化两个指针pre和cur&#xff0c;分别表示前驱…

ERROR [internal] load metadata for docker.io/library/nginx:latest

docker执行错误解决方法 1、执行docker pull nginx2、docker build -t xxx:xx

Ai环境安装教程

依赖的驱动软件 python3.115cuda11.4torch2.0.1 一。如何下载安装 一、驱动下载 【Python链接】https://www.python.org/ftp/python/3.11.5/python-3.11.5-amd64.exe 【CUDA链接】https://developer.download.nvidia.com/compute/cuda/11.4.4/local_installers/cuda_11.4.4…

从 Microsoft 官网下载 Windows 10

方法一&#xff1a; 打开 Microsoft 官网&#xff1a; 打开开发人员工具&#xff08;按 F12 或右键点击“检查”&#xff09;。 点击“电脑模拟手机”按钮&#xff0c;即下图&#xff1a; 点击后重新加载此网页&#xff0c;即可看到下载选项。

成都睿明智科技有限公司共创抖音电商新篇章

在当今这个数字化浪潮汹涌的时代&#xff0c;抖音电商以其独特的魅力迅速崛起&#xff0c;成为众多商家竞相追逐的新蓝海。在这片充满机遇与挑战的领域中&#xff0c;成都睿明智科技有限公司凭借其专业的服务、创新的策略和敏锐的市场洞察力&#xff0c;成为了众多商家信赖的合…