Почему тест @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.

Другие вопросы по тегам