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

文章目录 1.测试生命周期阶段 2. Before和After注解 3.@Disabled 禁用测试 4.Assertions 断言 5.Assumptions 假设 在JUnit 5中,测试生命周期由四个主要的注解驱动,即……




  • 1.测试生命周期阶段
  • 2. Before和After注解
  • 3.@Disabled 禁用测试
  • 4.Assertions 断言
  • 5.Assumptions 假设

在JUnit 5中,测试生命周期由四个主要的注解驱动,即@BeforeAll、@BeforeEach、@AfterEach和@AfterAll。同时,每个测试方法必须标记有来自org.junit.jupiter.api包的@Test注解。

1.测试生命周期阶段

通常,一个测试类包含多个测试方法。JUnit以生命周期的形式管理每个测试方法的执行。
借助注解,可以看到一个测试用例的完整生命周期分为三个阶段:

  • 设置:这个阶段将测试基础架构就位。JUnit提供类级别设置(@BeforeAll)和方法级别设置(@BeforeEach)。通常,像数据库连接这样的重量级对象在类级别设置中创建,而像测试对象这样的轻量级对象在方法级别设置中重置。
  • 测试执行:在此阶段,执行测试和断言。执行结果将表示成功或失败。
  • 清理:此阶段用于清理第一个阶段中设置的测试基础架构。就像设置一样,拆除也发生在类级别(@AfterAll)和方法级别(@AfterEach)。

JUnit 5 测试生命周期

2. Before和After注解

如上所示,在测试生命周期中,我们主要需要一些带有注解的方法来设置和清理测试环境或测试数据,以便进行测试。

  • 在JUnit中,默认情况下,对于每个测试方法都会创建一个新的测试实例。
  • @BeforeAll和@AfterAll注解——从它们的名字就可以看出——在整个测试执行周期中只应调用一次。因此,它们必须声明为静态的。
  • @BeforeEach和@AfterEach被每个测试实例调用,因此它们不应被声明为静态的。
  • 如果有多个方法使用相同的注解(例如两个带有@BeforeAll的方法),那么它们的执行顺序是不确定的。
public class AppTest {
    @BeforeAll
    static void setup(){
        System.out.println(\"@BeforeAll executed\");
    }
    @BeforeEach
    void setupThis(){
        System.out.println(\"@BeforeEach executed\");
    }
    @Test
    void testCalcOne()
    {
        System.out.println(\"======TEST ONE EXECUTED=======\");
        Assertions.assertEquals( 4 , Calculator.add(2, 2));
    }
    @Test
    void testCalcTwo()
   {
        System.out.println(\"======TEST TWO EXECUTED=======\");
        Assertions.assertEquals( 6 , Calculator.add(2, 4));
    }
    @AfterEach
    void tearThis(){
        System.out.println(\"@AfterEach executed\");
    }
    @AfterAll
    static void tear(){
        System.out.println(\"@AfterAll executed\");
    }
}

输出:

@BeforeAll executed
@BeforeEach executed
======TEST ONE EXECUTED=======
@AfterEach executed
@BeforeEach executed
======TEST TWO EXECUTED=======
@AfterEach executed
@AfterAll executed

3.@Disabled 禁用测试

要在JUnit 5中禁用测试,您需要使用@Disabled注解。它与JUnit 4中的@Ignored注解等效。

@Disabled注解可以应用于测试类(禁用该类中的所有测试方法)或单独的测试方法。

@Disabled
@Test
void testCalcTwo()
{
    System.out.println(\"======TEST TWO EXECUTED=======\");
    Assertions.assertEquals( 6 , Calculator.add(2, 4));
}

4.Assertions 断言

在任何测试方法中,我们需要确定它是通过还是失败。我们可以通过断言来完成。
断言有助于将测试的预期输出与实际输出进行比较。为了保持简单,JUnit Jupiter的所有断言都是org.junit.jupiter.Assertions类中的静态方法。

@Test
public void test()
{
    //该测试将通过
    Assertions.assertEquals(4, Calculator.add(2, 2));
    //该测试将失败
    Assertions.assertEquals(3, Calculator.add(2, 2), \"Calculator.add(2, 2) test failed\");
    //该测试将失败
    Supplier<String> messageSupplier  = ()-> \"Calculator.add(2, 2) test failed\";
    Assertions.assertEquals(3, Calculator.add(2, 2), messageSupplier);
}

要使测试失败,只需使用Assertions.fail()方法。

@Test
void testCase() {
    Assertions.fail(\"not found good reason to pass\");
}

5.Assumptions 假设

假设提供静态方法来支持基于假设的条件测试执行。如果假设失败,则测试将被中止。

假设通常用于在继续执行给定的测试方法没有意义的情况下使用。在测试报告中,这些测试将被标记为已通过。

假设类有三个具有许多重载形式的方法:

  • assumeFalse():验证给定的假设是否为false。
  • assumeTrue():验证给定的假设是否为true。
  • assumingThat():执行提供的可执行文件,但仅在提供的假设有效时才执行。
@Test
void testOnDev()
{
    System.setProperty(\"ENV\", \"DEV\");
    Assumptions.assumeTrue(\"DEV\".equals(System.getProperty(\"ENV\")));
    //剩余的测试将继续进行
}
@Test
void testOnProd()
{
    System.setProperty(\"ENV\", \"PROD\");
    Assumptions.assumeTrue(\"DEV\".equals(System.getProperty(\"ENV\")));
    //其余的测试将被中止。
}

以上所有注解和类都适用于JUnit测试生命周期。

微信扫一扫

支付宝扫一扫

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

管理员

相关推荐
2025-08-06

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

986
2025-08-06

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

463
2025-08-06

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

347
2025-08-06

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

455
2025-08-06

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

515
2025-08-06

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

831
发表评论
暂无评论

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

助力内容变现

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

点击联系客服

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

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号