JUnit5 测试生命周期
原文: https://howtodoinjava.com/junit5/junit-5-test-lifecycle/
在 JUnit5 中,测试生命周期由 4 个主要注解驱动,即@BeforeAll
, @BeforeEach
, @AfterEach
和@AfterAll
。 同时,每个测试方法都必须标有@Test
注解。 尽管@Test
注解不再使用可选参数,但它几乎没有变化。
之前和之后
在单元测试生命周期中,您首先需要使用一些方法来设置和拆除运行测试的环境或测试数据。
在 JUnit 中,为每个测试创建一个新的测试实例。 @BeforeAll
和@AfterAll
注解(按名称清除)在整个测试执行周期中仅应调用一次。 因此,必须将它们声明为static
。
如果它们是具有相同注解的多个方法(例如,两个具有@BeforeAll
的方法),则它们的执行顺序不确定。
对于每个测试实例都调用@BeforeEach
和@AfterEach
,因此不必是static
。
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
禁用测试
要在 JUnit5 中禁用测试,您将需要使用@Disabled
注解。 它等效于 JUnit4 的@Ignored
注解。
@Disabled
注解可以应用于测试类(禁用该类中的所有测试方法)或单个测试方法。
@Disabled
@Test
void testCalcTwo()
{
System.out.println("======TEST TWO EXECUTED=======");
Assertions.assertEquals( 6 , Calculator.add(2, 4));
}
断言
在任何测试方法中,我们都需要确定它是否通过失败。 您可以使用断言进行操作。 断言有助于通过测试用例的实际输出来验证期望的输出。 为简单起见,所有 JUnit Jupiter 断言都是org.junit.jupiter.Assertions
类中的静态方法。
void testCase()
{
//Test will pass
Assertions.assertEquals(4, Calculator.add(2, 2));
//Test will fail
Assertions.assertEquals(3, Calculator.add(2, 2), "Calculator.add(2, 2) test failed");
//Test will fail
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");
}
假设
假设提供了静态方法来支持基于假设的条件测试执行。 假设失败会导致测试中止。 通常在没有必要继续执行给定测试方法的情况下使用假设。 在测试报告中,这些测试将被标记为通过。
假设类有两种方法:assumeFalse()
,assumeTrue()
。 第三种方法assumeThat()
处于实验状态,可能会在将来的版本中得到确认。
@Test
void testOnDev()
{
System.setProperty("ENV", "DEV");
Assumptions.assumeTrue("DEV".equals(System.getProperty("ENV")));
//remainder of test will proceed
}
@Test
void testOnProd()
{
System.setProperty("ENV", "PROD");
Assumptions.assumeTrue("DEV".equals(System.getProperty("ENV")));
//remainder of test will be aborted
}
junit 测试生命周期的所有上述注解和类。 将我的问题放在评论部分。
学习愉快!