@BeforeAll 和 @AfterAll 必须是 static 的原因

@BeforeAll@AfterAll 必须是 static 的原因

  • 执行时机

    • @BeforeAll 方法在所有测试方法之前运行。
    • @AfterAll 方法在所有测试方法之后运行。
  • 实例化前/后的执行

    • 因为 @BeforeAll 是在所有测试方法执行之前运行的,所以它在任何一个测试实例创建之前就必须执行。
    • 类似地,@AfterAll 是在所有测试方法执行之后运行的,所以它在所有测试实例销毁之后执行。
  • 静态方法的特性

    • 静态方法属于类本身,而不是类的实例。因此,可以在没有创建类的实例的情况下调用静态方法。
    • 使用静态方法可以确保 @BeforeAll 在任何测试实例创建之前运行,@AfterAll 在所有测试实例销毁之后运行。

举例说明

假设你有一个测试类 ExampleTest,包含 @BeforeAll@AfterAll 方法:

public class ExampleTest {@BeforeAllstatic void setUpAll() {// 执行全局初始化代码}@AfterAllstatic void tearDownAll() {// 执行全局清理代码}@Testvoid testMethod1() {// 第一个测试方法}@Testvoid testMethod2() {// 第二个测试方法}
}
  • setUpAll() 方法在 testMethod1()testMethod2() 之前运行,用于执行全局初始化操作。
  • tearDownAll() 方法在所有测试方法执行之后运行,用于执行全局清理操作。

因为 setUpAll()tearDownAll() 是静态的,它们不依赖于 ExampleTest 的任何实例,因此能够在测试类实例化之前和销毁之后正确运行。

反例说明

如果 @BeforeAll@AfterAll 方法不是静态的:

public class ExampleTest {@BeforeAllvoid setUpAll() {// 不能正确运行}@AfterAllvoid tearDownAll() {// 不能正确运行}@Testvoid testMethod1() {// 第一个测试方法}@Testvoid testMethod2() {// 第二个测试方法}
}

image-20240608180932747

  • JUnit 将无法在创建 ExampleTest 实例之前调用 setUpAll() 方法,因为实例方法需要依赖对象实例。
  • 同样,在销毁所有 ExampleTest 实例之后,也无法调用 tearDownAll() 方法。

因此,使用静态方法确保了 @BeforeAll@AfterAll 方法能够在正确的时间点运行,而不依赖于测试类的实例化状态。

总结

因此,使用静态方法确保了 @BeforeAll@AfterAll 方法能够在正确的时间点运行,而不依赖于测试类的实例化状态。

总结

通过要求 @BeforeAll@AfterAll 方法是静态的,JUnit 能够在测试类实例化之前和销毁之后正确地运行全局初始化和清理代码,从而确保测试环境的一致性和可靠性。

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

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

相关文章

基于springboot的教学管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,教师管理,学生管理,课程管理 教师账户功能包括:系统首页,个人中心,学生管理,课程管理,课程表…

Oracle 数据库的自动化工具:AWR 和 ASM

Oracle 数据库提供了一系列工具和技术,以提高数据库管理的效率和性能。其中,AWR和 ASM是两个关键组件。本文将详细介绍 AWR 和 ASM 的功能及其在数据库管理中的重要性。 AWR AWR 是 Oracle 数据库的一个核心部分,用于收集、处理和维护数据库…

数据结构---树与二叉树

个人介绍 hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的…

【CTF MISC】XCTF GFSJ0290 reverseMe Writeup(图像处理)

reverseMe 暂无 解法 导入 Photoshop。 水平翻转,得到 flag。 Flag flag{4f7548f93c7bef1dc6a0542cf04e796e}声明 本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶机上进行&#xf…

QField如何打开工程或数据文件

Field有个文件选择器,允许从本地设备打开工程。如果想从云端打开文件,请参阅 QFieldCloud 。 注意:请注意,卸载QField时,应用程序文件夹将被删除,而更新则不会。 导入并打开本地工程 QField界面 当转到 …

了解Synchronized对象头?

1、对象头的结构 Java对象存储在内存中结构为: 对象头(Header):实例数据(Instance Data):定义类中的成员属性对齐填充字节(Padding):由于HotSpot虚拟机的自…

Web Dart前端:探索、挑战与未来展望

Web Dart前端:探索、挑战与未来展望 在数字化浪潮的推动下,Web前端技术日新月异,其中Dart语言作为一种高效且灵活的编程语言,正逐渐在Web前端领域崭露头角。然而,Dart在Web前端的应用仍面临诸多挑战和未知。本文将从四…

Linux--进程间通信(system V共享内存)

目录 1.原理部分 2.系统调用接口 参数说明 返回值 1. 函数原型 2. 参数说明 3. 返回值 4. 原理 5. 注意事项 3.使用一下shmget(一段代码) 4.一个案例(一段代码) 1.简单封装一下 2.使用共享内存 2.1挂接(shmat&#x…

Java 语言概述 -- Java 语言的介绍、现在、过去与将来

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 001 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…

直接赋值导致响应式断开,前端深浅拷贝

title: 直接赋值导致响应式断开,前端深浅拷贝 date: 2024-06-08 09:56:05 tags: vue3 vue3中的ref对象的深浅拷贝问题,实际应用出现的相关的问题。 概念总述 浅拷贝 仅仅复制了数据,没有改变他原来的引用。 表现:当你对新对象…

Unity3D EventMgr事件订阅与发布详解

在游戏开发过程中,经常需要处理各种事件,比如角色的移动、碰撞、攻击等。为了更好地管理和处理这些事件,Unity3D提供了EventMgr事件订阅与发布机制,通过该机制可以实现不同对象之间的事件通信,让游戏逻辑更加清晰和灵活…

LLVM Cpu0 新后端7 第一部分 DAG调试 dot文件 Machine Pass

想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1V_tZkt9uvxo5bnUufhMQ_Q?…

单线服务器与双线服务器的区别?

单线服务器和双线服务器之间有什么区别呢?接下来就让小万来为大家具体分析一下吧! 首先单线服务器和双线服务器之间运营商的性质是不同的,单线服务器主要是一家带宽运营商,而双线服务器则是有两家运营商提供带宽的线路。 单线服务…

spring两种代理方式

Spring 提供了两种主要的代理(proxy)方式,分别是基于JDK动态代理和基于CGLIB的代理。这两种代理方式各有其特点和适用场景。 1. JDK动态代理 特点: - 基于Java的接口(Interface)。 - 代理类必须实现一个或…

contos7使用docker安装vulhub

contos7下使用docker安装vulhub 1. 安装docker 1. 更新yum (1)切换root用户 su root (2)更新yum yum update 2. 卸载旧版本的docker sudo yum remove docker sudo yum remove docker-client sudo yum remove docker-clien…

【个人博客搭建】(21)使用AutoMap对象映射

在.NET WebAPI项目中,使用AutoMap进行对象映射是一种高效的数据处理方式。通过自动映射机制,可以极大地简化对象之间的转换过程,提高代码的可维护性和整洁性。下面将详细探讨如何在.NET WebAPI中使用AutoMap进行对象映射: 安装和配…

高并发ping多台主机IP

简介 社区或者是大型公司往往有成千上万或者几百台设备,保持设备始终在线对网络运维人员来说至关重要,然而一个一个登录检查,或者一个一个ping并不明智,累人且效率极低,并出错率高。花钱买检测服务当我没说。 shell编…

K210视觉识别模块学习笔记5:(嘉楠)训练使用模型_识别人脸

今日开始学习K210视觉识别模块:(嘉楠)训练与使用模型_识别人脸 亚博智能的K210视觉识别模块...... 固件库版本: canmv_yahboom_v2.1.1.bin 之前的训练网址部署模型时需要我们自己更换固件,而且还不能用亚博的图像操作库函数了,这十分不友好&#xff0…

Web前端从什么学起:探索前端世界的起点与路径

Web前端从什么学起:探索前端世界的起点与路径 在数字化浪潮席卷而来的今天,Web前端技术作为构建用户界面的核心力量,日益受到人们的关注。对于初学者来说,Web前端的学习旅程可能充满了未知与挑战。那么,Web前端究竟应…

liunx查看日志

tail查看日志 tail 查看文件的末尾部分 -f 实时监控日志文件的更新,如果有新的日志将会实时显示 -n 查看日志的后n行 tail -fn 100 filename.log // 实时查看filename.log的最后100行head查看日志 head 查看日志的头部 -n 指定查看行数 head -n 100 filename.log…