关于java:JUnit5教程2JUnit5测试生命周期及与JUnit4注解的不同

26次阅读

共计 1779 个字符,预计需要花费 5 分钟才能阅读完成。

你好啊,我是大阳。

本文咱们探讨 JUnit5 测试生命周期,以及 JUnit5 与 JUnit4 的不同之处。

1. 测试阶段的生命周期

通常,一个测试类蕴含多个测试方法。JUnit 以生命周期的模式治理每个测试方法的执行。

在注解的帮忙下,测试用例的残缺生命周期能够分为 三个阶段

  1. 设置:此阶段将测试基础设施配置到位。JUnit 提供 类级别设置 办法级别设置。通常,像数据库连贯这样的重对象是在类级别设置中创立的,而像测试对象这样的轻量对象是在办法级别设置的。
  2. 测试执行 :在这个阶段,次要是 测试执行和断言。执行后果将应用胜利或失败来示意。
  3. 清理 :此阶段用于清理第一阶段的测试基础设施配置。就像配置一样,装配配置也分为 类级别 办法级别

在 JUnit 5 中,测试生命周期由四个次要注解驱动,即 @BeforeAll、@BeforeEach、@AfterEach 和 @AfterAll。除此之外,每个测试方法都必须应用@Test 注解进行标记。如图(应用 drawIO 绘制)

如上所示,在 测试生命周期 中,咱们次要须要应用带注解的办法来装载和卸载测试运行的测试环境或测试数据。

  • JUnit 在默认状况下,为每个测试方法创立一个新的测试实例。
  • @BeforeAll@AfterAll 正文,应该在整个测试执行周期中只调用一次。所以必须申明它们static
  • @BeforeEach@AfterEach 为每个测试实例调用,所以它们不应该是static.
  • 如果有多个办法应用雷同的注解进行正文(例如两个办法应用@BeforeAll),则它们的执行程序是不确定的。
  • 要在 JUnit 5 中禁用测试,您须要应用 @Disabled 正文。它相当于 JUnit 4 的 @Ignored 注解。

    @Disabled正文能够利用于测试类(禁用该类中的所有测试方法)或单个测试方法。

上代码:

package cn.dayangshuo.junit5.tests;

import cn.dayangshuo.junit5.Calculator;
import org.junit.jupiter.api.*;

/**
 * @author DAYANG
 */
public class LifeCycleTests {

    @BeforeAll
    static void beforeAll() {System.out.println("@BeforeAll 执行了");
    }

    @BeforeEach
    void setupThis() {System.out.println("@BeforeEach 执行了");
    }

    @Tag("DEV")
    @DisplayName("生命周期测试")
    @Test
    void testCalcOne() {System.out.println("====== 测试 1 执行了 =======");
        Assertions.assertEquals(4, Calculator.add(2, 2));
    }

    @Tag("PROD")
    @Disabled
    @Test
    void testCalcTwo() {System.out.println("====== 测试 2 执行了 =======");
        Assertions.assertEquals(6, Calculator.add(2, 4));
    }

    @AfterEach
    void tearThis() {System.out.println("@AfterEach 执行了");
    }

    @AfterAll
    static void tear() {System.out.println("@AfterAll 执行了");
    }
}

执行后果:

2. JUnit5 与 JUnit4 注解比照

两个版本中的大多数正文都是雷同的,但也有一些不同。如下表:

特色 JUnit 4 六月 5
申明一个测试方法 @Test @Test
在以后类中的所有测试方法之前执行 @BeforeClass @BeforeAll
在以后类中的所有测试方法之后执行 @AfterClass @AfterAll
在每个测试方法之前执行 @Before @BeforeEach
在每个测试方法之后执行 @After @AfterEach
禁用测试方法 / 类 @Ignore @Disabled
测试工厂 NAN @TestFactory
嵌套测试 NAN @Nested
标记和过滤 @Category @Tag
注册自定义扩大 NAN @ExtendWith

接下来咱们将探讨 JUnit5 的断言、假如、测试套件和灵便的参数化测试性能。

正文完
 0