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

@BeforeAll@AfterAll 必须是 static 的原因

  • 执行时机

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

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

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

举例说明

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

public class ExampleTest {

    @BeforeAll
    static void setUpAll() {
        // 执行全局初始化代码
    }

    @AfterAll
    static void tearDownAll() {
        // 执行全局清理代码
    }

    @Test
    void testMethod1() {
        // 第一个测试方法
    }

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

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

反例说明

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

public class ExampleTest {

    @BeforeAll
    void setUpAll() {
        // 不能正确运行
    }

    @AfterAll
    void tearDownAll() {
        // 不能正确运行
    }

    @Test
    void testMethod1() {
        // 第一个测试方法
    }

    @Test
    void testMethod2() {
        // 第二个测试方法
    }
}

image-20240608180932747

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

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

总结

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

总结

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

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

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

相关文章

拉格朗日乘子将不等式约束转化为等式约束例子

拉格朗日乘子将不等式约束转化为等式约束例子 在优化问题中,常常需要将不等式约束转化为等式约束。使用拉格朗日乘子法,可以通过引入松弛变量将不等式约束转换为等式约束,然后构造拉格朗日函数进行求解。 拉格朗日乘子法简介 拉格朗日乘子法是求解带约束优化问题的一种方…

Rust-02-变量与可变性

在Rust中,变量和可变性是两个重要的概念。 变量:变量是用于存储数据的标识符。在Rust中,变量需要声明其类型,例如: let x: i32 5; // 声明一个名为x的变量,类型为i32(整数)&#…

jasypt配置文件密码加密解码

1. 需求讲解 对配置文件的组件密码加密,比如数据库redis等密码加密 2. 开发 2.1 依赖引入 <!-- jasypt 加解密 --><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><v…

【C语言】动态内存经典笔试题(下卷)

前言 如果说动态内存是C语言给我们的一个工具&#xff0c;那么只有掌握了工具的特点我们才能更好地使用。 紧随上卷&#xff0c;我们再来看看动态内存另外两道经典的笔试题。 &#xff08;建议没看过上卷的朋友可以先看完上卷再回来&#xff1a;【C语言】动态内存经典笔试题…

Java面试八股之什么是自动装箱和自动拆箱

什么是自动装箱和自动拆箱 在Java中&#xff0c;自动装箱&#xff08;Autoboxing&#xff09;和自动拆箱&#xff08;Auto-unboxing&#xff09;是两个与基本数据类型和它们对应的包装类之间的转换相关的特性。这两个概念自Java 5&#xff08;也称为Java SE 5或JDK 5&#xff…

牛客NC18 顺时针旋转矩阵【中等 数学 Java/Go/PHP/C++】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/2e95333fbdd4451395066957e24909cc https://www.lintcode.com/problem/161/ 思路 Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#…

C#操作MySQL从入门到精通(16)——使用子查询

前言: 我们在查询数据的过程中有时候查询的数据不是从数据库中来的,而是从另一个查询的结果来的,这时候就需要使用子查询,本文使用的测试数据如下: 1、子查询 下面的代码就是先查询地址是安徽和广西的学生年龄,然后获取年龄对应的姓名 private void button__SubQuery…

像素蛋糕Photoshop颜色导出不一致问题分析与解决

问题点&#xff1a;发现用像素蛋糕修完图明天应该为最右边图片显示 模特应该是白皙的&#xff0c;但是导出图片无论是否勾选SRGB都表现的为种间图片颜色一样 饱和度巨高。 问题分析&#xff1a;那这一定是颜色配置文件出现问题&#xff0c;找到客服表示可以去PS打开看是否与预…

彼长技以助己(5)量级思维

彼长技以助己&#xff08;5&#xff09;量级思维 数字感性与理性测试 我先讲一个可能发生在我们身边的故事&#xff1a;一个程序员在一个项目开发中使用了考虑到目前业务量少&#xff0c;快速写了一个冒泡排序&#xff0c;结果被经理批评了&#xff0c;然后他跑来找你诉苦&am…

Application Load Balancer-ALB

Application Load Balancer-ALB 什么是ALB开通ALB服务实现IPv4服务的负载均衡创建ALB实例创建服务器组添加后端服务器配置监听设置域名解析&#xff08;可选&#xff09;释放ALB实例 什么是ALB 在介绍ALB之前首先介绍一下负载均衡SLB&#xff0c;可以说SLB是负载均衡家族之首 …

CentOS7 配置Nginx域名HTTPS

Configuring Nginx with HTTPS on CentOS 7 involves similar steps to the ones for Ubuntu, but with some variations in package management and service control. Here’s a step-by-step guide for CentOS 7: Prerequisites Domain Name: “www.xxx.com”Nginx Install…

目录穿越漏洞CVE-2018-7171复现 又学到一招小技巧!!!!

还是半夜睡不着&#xff0c;打开靶机开始操作。今天看了文件下载和目录穿越漏洞想结合以及防御方法。半夜来进行操作一波。复现一下漏洞&#xff0c;这个网上的文章页比较的少&#xff01;&#xff01;&#xff01; 开始操作起来&#xff01;&#xff01;&#xff01; 进入到页…

【初识Objective-C】

Objective-C学习 什么是OCOC的特性OC跑的第一个程序helloworld OC的一些基础知识标识符OC关键字数据类型字符型c字符串为什么NSString类型定义时前面要加和普通的c对象有什么区别 一些基础知识if语句switch语句三种循坏语句for循环&#xff1a;用于固定次数的循环while循环&…

小成代码路的错误2

文章目录 1.继承中子类和父类之间的隐藏&#xff1b;只要函数名字相同就会出现隐藏&#xff1b;这里和函数的参数无关&#xff1b;继承的析构函数会自动先调用子类的析构函数再调用父类的析构函数&#xff1b;不需要写仍和的父类的析构函数&#xff1b;继承中的静态成员在父类中…

SpringBoot3学习总结

一.SpringBoot3介绍 (一)主要目标 SpringBoot的主要目标是&#xff1a; 为所有 Spring 开发提供更快速、可广泛访问的入门体验。 开箱即用&#xff0c;设置合理的默认值&#xff0c;但是也可以根据需求进行适当的调整 提供一系列大型项目通用的非功能性程序&#xff08;如…

第二届黄河流域团队赛个人wp

个人wp web 两个题都几乎是网上的原题&#xff0c;不想多说了&#xff0c;放个链接&#xff0c;重点记录一下自己第一次遇到的misc 冰蝎流量分析 web1 https://blog.csdn.net/qq_51768842/article/details/125153850 web2 https://blog.csdn.net/m0_73512445/article/detai…

当我拿到百度文心智能体大赛top1后,我又开发了...

目录 一、写在前面 二、代码助手 三、关于智能体 四、写在后面 一、写在前面 在不久前结束的文心智能体大赛&#xff08;第一期&#xff09;中&#xff0c;我有幸凭借一款名为恋爱助手的智能体斩获了大赛的桂冠。这个成绩&#xff0c;既是对我努力的认可&#xff0c;也是对…

【Java】试问:你小汁就是我的代理类吗?(动态代理)

【Java】试问&#xff1a;你小汁就是我的代理类吗&#xff1f;&#xff08;动态代理&#xff09; 文章目录 【Java】试问&#xff1a;你小汁就是我的代理类吗&#xff1f;&#xff08;动态代理&#xff09;代理模式啥是代理模式&#xff1f;代理模式是嘎哈的&#xff1f;1. 日志…

Cesium开发环境搭建(一)

1.下载安装Node.js 进入官网地址下载安装包 Node.js — Download Node.js https://cdn.npmmirror.com/binaries/node/ 选择对应你系统的Node.js版本&#xff0c;这里我选择的是Windows系统、64位 安装完成后&#xff0c;WINR&#xff0c;输入node --version&#xff0c;显示…

360数字安全:2024年4月勒索软件流行态势分析报告

勒索软件传播至今&#xff0c;360 反勒索服务已累计接收到数万勒索软件感染求助。随着新型勒索软件的快速蔓延&#xff0c;企业数据泄露风险不断上升&#xff0c;勒索金额在数百万到近亿美元的勒索案件不断出现。勒索软件给企业和个人带来的影响范围越来越广&#xff0c;危害性…