ejecución de inicializador de propiedad kotlin en testings JUnit

Tengo una class base abstracta para probar en Kotlin:

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

Luego, en la class de testing derivada, tenemos

 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) } } 

Cuando vi por primera vez este código, pensé que esto sería problemático ya que si la session solo se ejecuta una vez en la parte de initialization, se cerrará después de que se ejecute la primera testing. Y durante la segunda testing, dado que la session se ha cerrado, arrojará una exception. Sin embargo, el código se ejecuta sin problemas. Cuando lo rastreé, vi que el bloque de initialization se ejecutó para cada testing. En otras palabras, la session se inicializó para cada testing.

Mi pregunta es por qué? ¿Es este el comportamiento detrás de JUnit que para cada testing, ejecutará todo el inicializador más el constructor de la class?

Si este es el caso, ¿por qué usar la anotación @Before ? ¿No podemos simplemente poner todo el código @Before en el bloque de initialization