Выполнение инициализатора свойств kotlin в тестах JUnit

У меня есть абстрактный базовый класс для тестирования в Котлине:

abstract class TestBase(){ protected var session = configure() private fun configure() { ... return session // a live session object } @After open fun tearDown() { ... session.close() } } 

Тогда в производном тестовом классе мы имеем

 class MyTest: TestBase() { ... @Test fun testScenario1() { ... // uses the live session object assertTrue(myCondition_1) } @Test fun testScenario2() { ... // uses the live session object assertTrue(myCondition_2) } } 

Когда я впервые увидел этот код, я подумал, что это будет проблематично, поскольку если session выполняется только один раз в части инициализации, он будет закрыт после запуска первого теста. И во время второго теста, поскольку session закрыт, он будет генерировать исключение. Однако код работает без проблем. Когда я проследил его, я увидел, что для каждого теста был запущен блок инициализации. Другими словами, session был инициализирован для каждого теста.

Почему мой вопрос? Является ли это поведение JUnit, что для каждого теста он будет запускать весь инициализатор плюс конструктор класса?

Если это так, зачем использовать аннотацию @Before ? Не можем ли мы просто поместить весь код @Before в блок инициализатора

Да, JUnit создает новый экземпляр класса для каждого теста. @Before метод вызывается после конструктора.

Не можем ли мы просто поместить весь код @Before в блок инициализатора

Да, вы можете (в конструкторе для Java). Это больше для симметрии с @After .