为什么@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 方法都是有意义的。
我正在使用 @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 方法都是有意义的。