【软件测试】JUnit

embedded/2024/10/21 7:40:06/

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指定测试用例

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

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

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

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

在这里插入图片描述


  • CSV多参数

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

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

在这里插入图片描述


  • 通过CSV文件获取参数

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

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

在这里插入图片描述


  • 通过方法获取参数 & 多参数
java">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

java">@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest {@Order(1)@Testvoid Test01(){System.out.println("这是JunitTest里面的Test01");}@Order(3)@Testvoid 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)
    • 检查两个值是否相等,第一个参数是预期值,第二个是实际值
java">import static org.junit.Assert.assertEquals;
@Test
public void Test() {int sum = 2 + 3;Assertions.assertEquals(6, sum); // 验证 2 + 3 是否等于 6
}

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

  1. assertTrue(condition)
    • 检查条件是否为真
java">import static org.junit.Assert.assertTrue;@Test
public void testIsPositive() {int number = 10;Assertions.assertTrue(number > 0); // 验证 number 是否大于 0
}
  1. assertNull(object)
    • 检查对象是否为 null
java">import static org.junit.Assert.assertNull;@Test
public void testObjectIsNull() {Object obj = null;Assertions.assertNull(obj); // 验证 obj 是否为 null
}
  1. assertArrayEquals(expectedArray, actualArray)
    • 检查两个数组是否相等
java">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

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

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

根据 Package 运行

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

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

测试套件如下:

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

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


http://www.ppmy.cn/embedded/129210.html

相关文章

Linux学习第二天

3.vmware的功能&#xff1a; 快照 创建快照&#xff1a; 拍摄此虚拟机的快照&#xff1a;记录保存虚拟机的当前状态&#xff0c;如果系统出现故障&#xff0c;可以通过快照还原&#xff08;错删系统时可以找到快照的系统状态&#xff0c;然后恢复系统&#xff09; 恢复快照…

WSL2配置代理解决git网络不通畅的问题

简述 书接上文&#xff0c;在WSL2下使用CrossSim&#xff0c;git的时候网络很差&#xff0c;通过代理解决这个问题。 旧版的解决方案一般是通过cat /etc/resolv.conf获取IP然后配置主机的端口&#xff0c;这样有时候并不能访问&#xff0c;并且一般会出现该问题&#xff1a;ws…

【人工智能-初级】第3章 k-最近邻算法(KNN):分类和Python实现

文章目录 一、KNN算法简介二、KNN算法的工作原理2.1 欧氏距离 三、K值的选择四、KNN算法的优缺点4.1 优点4.2 缺点 五、Python实现KNN分类5.1 导入必要的库5.2 加载数据集并进行预处理5.3 创建KNN分类器并进行训练5.4 模型预测与评估5.5 可视化K值对模型性能的影响 六、总结6.1…

《京东金融APP的鸿蒙之旅系列专题》鸿蒙工程化:Hvigor构建技术

作者&#xff1a;京东科技 杨拓 一、构建工具概述 Hvigor构建工具是一款基于TypeScript实现的构建任务编排工具&#xff0c;专为提升构建和测试应用的效率而设计。它主要提供以下关键功能&#xff1a; 1.任务管理机制&#xff1a;包括任务注册和编排&#xff0c;帮助开发者高效…

外包干了3周,技术退步太明显了。。。。。

先说一下自己的情况&#xff0c;大专生&#xff0c;21年通过校招进入武汉某软件公司&#xff0c;干了差不多3个星期的功能测试&#xff0c;那年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我才在一个外包企业干了3周的功…

个人主页模版(源代码开源)

个人主页模版&#xff08;源代码开源&#xff09; 项目预览地址&#xff1a;My Website Github仓库地址&#xff1a;personal_page_public Hello,这里是个人主页模版代码的开源页。 源代码自取&#xff0c;就在项目文件中。当然&#xff0c;你也可以在 r e l e a s e s rel…

【无标题】react组件封装

子组件制作 import { useState,useRef, useEffect} from "react"const Table (data)> {const {value ,option} dataconsole.log(value)const [stata,setValue] useState()const useRefs useRef(value)useEffect(()> {useRefs.current.value value })c…

11.useComponentDidMount

在 React 的函数组件中,有时我们需要在组件首次挂载后执行某些操作,这在类组件中通常通过 componentDidMount 生命周期方法来实现。useComponentDidMount 钩子提供了一种简洁的方式来在函数组件中实现相同的功能。这个自定义钩子使得在组件挂载后执行一次性操作变得简单直观。…