Почему тест @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 ответ
Это стандартный жизненный цикл для JUnit. Новый экземпляр класса создается перед вызовом каждого метода тестирования. Создание этого экземпляра требует вызова конструктора тестового класса. Учитывая, что конструктор был вызван, имеет смысл вызывать любые методы @PostConstruct.