当前位置: 首页 > news >正文

软件测试教程 自动化测试之Junit框架

文章目录

  • 1. 什么是 Junit ?
  • 2. 常见的注解
    • 2.1 @Test
    • 2.2 @BeforeAll,@AfterAll
    • 2.3 @BeforeEach,@AfterEach
  • 3. 测试用例顺序指定
  • 4. 参数化
    • 4.1 单个参数
    • 4.2 多个参数
    • 4.3 通过方法生成
  • 5. 测试套件
  • 6. 断言
    • 6.1 断言相等
    • 6.2 断言不相等
    • 6.3 断言为空
    • 6.4 断言不为空

1. 什么是 Junit ?

Junit 是 Java 的单元测试框架


在 Java 项目中加入 Junit 依赖

		<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.9.1</version></dependency><!-- 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><!-- 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>

2. 常见的注解

2.1 @Test

  • @Test:表名当前的方法是一个测试用例
import org.junit.jupiter.api.Test;public class JunitTest {@Testvoid Test01() {System.out.println("========这是第一个测试用例=======");}@Testvoid Test02() {System.out.println("========这是第二个测试用例=======");}
}

在这里插入图片描述

2.2 @BeforeAll,@AfterAll

  • @BeforeAll:当前 class 中所有测试用例执行之前自动执行
  • @AfterAll:当前 class 中所有测试用例执行结束之后自动执行
	@BeforeAllstatic void Start() {System.out.println("开始测试");}@AfterAllstatic void End() {System.out.println("结束测试");}

在这里插入图片描述

2.3 @BeforeEach,@AfterEach

  • @BeforeEach:当前 class 中每一个测试用例执行结束之前执行一次
  • @AfterEach:当前 class 中每一个测试用例执行结束之后执行一次
@BeforeEachvoid StartV1() {System.out.println("开始执行");}@AfterEachvoid EndV1() {System.out.println("执行结束");}

在这里插入图片描述

3. 测试用例顺序指定

  • @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
    在这里插入图片描述
    在这里插入图片描述

4. 参数化

4.1 单个参数

	//单参数@ParameterizedTest@ValueSource(ints = {1,2,3,4})void Test03(int x) {System.out.println("接收参数是 x = " + x);}

单参数有它的弊端,只能接收一种类型的参数,对应的 Test 方法,只能接收一个参数

4.2 多个参数

	//多参数@ParameterizedTest@CsvSource({"'张三','18'"})void Test04(String name, int age) {System.out.println(name + "今年 " + age + " 岁");}

参数化对应的注解上面如果写了Test,测试用例就会执行两次
其中一次就会报错,因为 Test 和 方法结合,没有找到参数,就会报错


	//多参数,读取文件中的数据,进行操作@ParameterizedTest@CsvFileSource(resources = "test01.csv")void Test05(String name, int age) {System.out.println("name:" + name + ", age:" + age);}

在这里插入图片描述
在这里插入图片描述

4.3 通过方法生成

	public static Stream<Arguments> Generate() {return Stream.of(Arguments.arguments("张三", 13),Arguments.arguments("李四",14));}//通过方法生成测试数据@ParameterizedTest@MethodSource("Generate")void Test06(String name, int age) {System.out.println("姓名:" + name + "年龄:" + age);}

在这里插入图片描述

5. 测试套件

  • @Suite

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

6. 断言

6.1 断言相等

//断言相等@Testvoid Test07() {int x = 10;int y = 20;Assertions.assertEquals(x, y);}

在这里插入图片描述

6.2 断言不相等

	//断言不相等@Testvoid Test07() {int x = 10;int y = 20;Assertions.assertNotEquals(x, y);}

在这里插入图片描述

6.3 断言为空

	//断言为空@Testvoid Test07() {int x = 10;int y = 20;String tmp = null;Assertions.assertNull(tmp);}

在这里插入图片描述

6.4 断言不为空

	//断言不为空@Testvoid Test07() {int x = 10;int y = 20;String tmp = null;Assertions.assertNotNull(tmp);}

在这里插入图片描述

相关文章:

  • 网络安全进入AI赋能时代
  • 记录C++中,子类同名属性并不能完全覆盖父类属性的问题
  • Linux编程3.8 进程-守护进程
  • nodejs中使用@maxmind/geoip2-node 查询地理位置信息
  • MySQL的进阶使用方法
  • 3D开发工具HOOPS如何助力3D项目实现扩展现实技术?
  • Trait与生命周期
  • 学习vue3 第四章(reactive全家桶)
  • playwright自动化项目搭建
  • laravel(源码笔记)服务绑定和解析(依赖注入-反射,控制反转)
  • 【DFS+贪心】第十四届蓝桥杯省赛C++ B组《飞机降落》(C++)
  • wordpress给指定ID分类添加特定的字段
  • 【skimage包如何安装】
  • CentOS7使用Docker部署.net Webapi
  • python云上水果超市的设计与实现flask-django-php-nodejs
  • 【RocksDB】TransactionDB源码分析
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • android 一些 utils
  • Asm.js的简单介绍
  • mysql常用命令汇总
  • React+TypeScript入门
  • React中的“虫洞”——Context
  • Redux 中间件分析
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • 机器学习中为什么要做归一化normalization
  • 我与Jetbrains的这些年
  • 项目管理碎碎念系列之一:干系人管理
  • 鱼骨图 - 如何绘制?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #laravel 通过手动安装依赖PHPExcel#
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (ros//EnvironmentVariables)ros环境变量
  • (TOJ2804)Even? Odd?
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (黑马C++)L06 重载与继承
  • (新)网络工程师考点串讲与真题详解
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)http-server应用
  • (转)iOS字体
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .NET Core 项目指定SDK版本
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET/C# 使窗口永不获得焦点
  • .NET4.0并行计算技术基础(1)
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .net解析传过来的xml_DOM4J解析XML文件
  • /etc/fstab 只读无法修改的解决办法
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [Android Studio 权威教程]断点调试和高级调试
  • [Android]如何调试Native memory crash issue
  • [C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强
  • [C]整形提升(转载)
  • [caffe(二)]Python加载训练caffe模型并进行测试1