为什么@SpringRunner 测试会在每次测试时重新初始化 class?

Why does @SpringRunner test reinitialize the class on each test?

我正在使用 @PostConstruct 在 运行 测试之前进行一些初始设置,但似乎 @PostConstruct 方法在每个测试中都是 运行,而不是在测试 class 初始化后只有一次。我还看到在 @PostConstruct 之前的每个测试之前都会调用构造函数。为什么测试 class 在每个 @Test 方法上都被初始化而不是只被初始化一次?

我正在使用 spring-boot-starter-test:1.5.7.RELEASE

示例测试设置:

@RunWith(SpringRunner.class)
public class TestClass {

    public TestClass() {
        System.out.println("constructor");
    }

    @PostConstruct
    public void setup() {
        System.out.println("setting up");
    }

    @Test
    public void test1() {
        System.out.println("test 1");
    }

    @Test
    public void test2() {
        System.out.println("test 2");
    }
}

在输出中,'constructor'打印了两次,'setting up'打印了两次。 'test 1' 和 'test 2' 各打印一次。

这是 JUnit 的标准生命周期。在调用每个测试方法之前创建 class 的新实例。创建该实例需要调用测试 class 的构造函数。鉴于已调用构造函数,调用任何 @PostConstruct 方法都是有意义的。