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

时间:2017-09-29 02:12:38

标签: spring-boot spring-test springrunner

我在运行测试之前使用@PostConstruct进行一些初始设置,但似乎@PostConstruct方法在每个测试中运行,而不是在初始化测试类之后运行一次。我还看到在@PostConstruct之前的每个测试之前都调用了构造函数。为什么在每个@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");
    }
}

在输出中,“构造函数”打印两次,“设置”打印两次。每次打印“test 1”和“test 2”。

1 个答案:

答案 0 :(得分:3)

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