共计 1779 个字符,预计需要花费 5 分钟才能阅读完成。
你好啊,我是大阳。
本文咱们探讨 JUnit5 测试生命周期,以及 JUnit5 与 JUnit4 的不同之处。
1. 测试阶段的生命周期
通常,一个测试类蕴含多个测试方法。JUnit 以生命周期的模式治理每个测试方法的执行。
在注解的帮忙下,测试用例的残缺生命周期能够分为 三个阶段:
- 设置:此阶段将测试基础设施配置到位。JUnit 提供 类级别设置 和办法级别设置。通常,像数据库连贯这样的重对象是在类级别设置中创立的,而像测试对象这样的轻量对象是在办法级别设置的。
- 测试执行 :在这个阶段,次要是 测试执行和断言。执行后果将应用胜利或失败来示意。
- 清理 :此阶段用于清理第一阶段的测试基础设施配置。就像配置一样,装配配置也分为 类级别 和办法级别。
在 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 的断言、假如、测试套件和灵便的参数化测试性能。
正文完