行业资讯 2025年08月6日
0 收藏 0 点赞 956 浏览 1665 个字
摘要 :

文章目录 1.@BeforeAll注解 2.@BeforeAll注解示例 JUnit 5中的@BeforeAll注解表示一个生命周期方法。@BeforeAll是JUnit 4中@BeforeClass注解的替代者。 1.@BeforeAll注……




  • 1.@BeforeAll注解
  • 2.@BeforeAll注解示例

JUnit 5中的@BeforeAll注解表示一个生命周期方法。@BeforeAll是JUnit 4中@BeforeClass注解的替代者。

1.@BeforeAll注解

@BeforeAll用于标记一个方法,该方法应在当前类中的所有@Test、@RepeatedTest、@ParameterizedTest和@TestFactory方法之前执行一次。默认情况下,测试方法将在与@BeforeAll注解方法相同的线程中执行。

1)@BeforeAll注解的方法必须是测试类中的静态方法。

@BeforeAll
public static void init(){
    System.out.println(\"BeforeAll init() method called\");
}

2)或者,如果测试接口或测试类上使用了@TestInstance(Lifecycle.PER_CLASS)注解,我们可以在接口的默认方法上应用此注解。

@TestInstance(Lifecycle.PER_CLASS)
interface TestLifecycleLogger {
    @BeforeAll
    default void beforeAllTests() {
        //
    }
}

如果做不到这一点,JUnit将抛出类型为JUnitException的运行时错误。

org.junit.platform.commons.JUnitException:
@BeforeAll method \'public void com.howtodoinjava.junit5.examples.
JUnit5AnnotationsExample.init()\' must be static.
at org.junit.jupiter.engine.descriptor.
LifecycleMethodUtils.assertStatic(LifecycleMethodUtils.java:66)

在父类和子类中,@BeforeAll方法是继承自父类(或接口)的,只要它们没有被隐藏或覆盖。此外,来自父类(或接口)的@BeforeAll方法将在子类的@BeforeAll方法之前执行。

2.@BeforeAll注解示例

让我们举一个例子。我们已经为Calculator类及其add()方法编写了一个测试。我们将使用@RepeatedTest注解来执行这个测试5次。@Repeated注解将导致add测试运行五次。但是,@BeforeAll注解的方法只能调用一次。

public class BeforeAllTest {
    @DisplayName(\"Add operation test\")
    @RepeatedTest(5)
    void addNumber(TestInfo testInfo, RepetitionInfo repetitionInfo) {
        System.out.println(\"Running test -> \" + repetitionInfo.getCurrentRepetition());
        Assertions.assertEquals(2, Calculator.add(1, 1), \"1 + 1 should equal 2\");
    }
    @BeforeAll
    public static void init(){
        System.out.println(\"Before All init() method called\");
    }
}

我们的Calculator类如下:

public class Calculator
{
    public static int add(int a, int b) {
        return a + b;
    }
}

现在执行测试,你会看到下面的控制台输出:

OutputBefore All init() method called
Running test -> 1
Running test -> 2
Running test -> 3
Running test -> 4
Running test -> 5

很明显,@BeforeAll注解的init()方法只被调用了一次。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9500.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号