JUnit 5 @BeforeAll和@AfterAll的用法

时间:2022-05-03 17:48:37

JUnit 5的@BeforeAll和@AfterAll注释分为两种情景使用:静态方法和实例方法。

静态方法

@BeforeAll和@AfterAll默认是添加到静态方法上,@BeforeAll注释的静态方法会在执行所有测试用例之前调用,@AfterAll注释的静态方法会在所有的测试用例完成后调用。它们是在应用级别,应用于所有实例对象。

示例:

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Junit5Test {

    private static final Logger LOGGER = LoggerFactory.getLogger(Junit5Test.class);

    @BeforeAll
    static void beforeAll() {
        LOGGER.info("beforeAll called");    
    }

    @Test
    public void aTest1() {
        LOGGER.info("aTest1 called");
        LOGGER.info(this.toString());        
    }

    @Test
    public void aTest2() {
        LOGGER.info("aTest2 called");
        LOGGER.info(this.toString());
    }

    @AfterAll
    static void afterAll() {
        LOGGER.info("afterAll called");        
    }
}

实例方法

@BeforeAll注释的实例方法会在实例所有的测试用例之前调用,@AfterAll注释的实例方法会在所有实例的测试用例之后调用。但如果@BeforeAll或@AfterAll要应用在实例方法上,需要在实例的类上添加注释@TestInstance。

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class Junit5Test {
....
}