Junit 5 套件没有 运行 @BeforeAll 和@AfterAll

Junit 5 suite Does not run @BeforeAll and@AfterAll

我有一个带有@BeforeAll 和@AfterAll 注释的简单Junit 5 Siute。 Suite被执行但是这些方法在所有classes执行前后都没有执行。

package demo;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectClasses({ demo.TestDemoClass1.class, demo.TestDemoClass2.class })

public class TestSuite {

    @BeforeAll
    public static void start() throws Exception {
        System.out.println("Before All from Suite1");
    }

    @AfterAll
    public static void end() throws Exception {
        System.out.println("After All from Suite1");
    }
}`

中的@BeforeAll表示注解的方法应该在@Test@RepeatedTest@ParameterizedTest@TestFactory中的所有方法之前执行33=]当前class;类似于 JUnit 4 的 @BeforeClass。此类方法是继承的(除非它们被隐藏或覆盖)并且必须是静态的(除非使用“per-class”测试实例生命周期)。

同样的情况适用于 @AfterAll,因此请考虑将 start()end() 方法移动到您的 TestDemoClass1TestDemoClass2 classes 或将你的测试 classes 扩展到一些 BaseClass 并将此方法保留在其中。

public class BaseTest {

    @BeforeAll
    public static void start() throws Exception {
        System.out.println("Before All from Suite1");
    }

    @AfterAll
    public static void end() throws Exception {
        System.out.println("After All from Suite1");
    }
}

你的测试 classes

public class SampleTestOne extends BaseTest {
    @Test
    public void testOne(){
        System.out.println("Extended test passed!");
    }

    @Test
    public void testTwo(){
        System.out.println("Extended test passed!");
    }
}
public class SampleTestTwo extends SampleTestOne {
    @Test
    public void testThree(){
        System.out.println("test passed");
    }
}

以及最后的结果

或者,您可以在完全解释 here.

的所有测试上下文之前为 运行 代码创建自定义扩展