JUnit 5测试生命周期

在JUnit 5中,测试生命周期由4个主要注解驱动,即@BeforeAll@BeforeEach@AfterEach@AfterAll。同时,每个测试方法都必须标有@Test注解。@Test注解实际上不再改变,尽管它不再使用可选参数。

之前和之后

junit测试生命周期中,您将主要需要一些方法来设置和拆除运行测试的环境或测试数据。

在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(22));
    }
    
    @Test
    void testCalcTwo()
    {
        System.out.println("======TEST TWO EXECUTED=======");
        Assertions.assertEquals( 6 , Calculator.add(24));
    }
    
    @AfterEach
    void tearThis(){
        System.out.println("@AfterEach executed");
    }
    
    @AfterAll
    static void tear(){
        System.out.println("@AfterAll executed");
    }
}

控制台输出:

@BeforeAll已执行

@BeforeEach执行
======执行一项测试=======
@AfterEach执行

@BeforeEach执行
======执行两次测试=======
@AfterEach执行

@AfterAll执行

禁用测试

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

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

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

断言

在任何测试方法中,我们都需要确定它是否通过失败。您可以使用Assertions实现。断言有助于通过测试用例的实际输出来验证期望的输出。为简单起见,所有JUnit Jupiter断言都是org.junit.jupiter.Assertions类中的静态方法。

void testCase()
{
    //Test will pass
    Assertions.assertEquals(4, Calculator.add(22));
     
    //Test will fail
    Assertions.assertEquals(3, Calculator.add(22), "Calculator.add(2, 2) test failed");
     
    //Test will fail
    Supplier<String> messageSupplier  = ()-> "Calculator.add(2, 2) test failed";
    Assertions.assertEquals(3, Calculator.add(22), messageSupplier);
}

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

@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测试生命周期的注解和类。如果您有任何疑问,请在评论区留言,我会一一解答。

saigon has written 1445 articles

Leave a Reply