cómo inicializar correctamente el recurso compartido en kotlintest 2.x (interceptSpec)

Estoy tratando de hacer un estándar antes de beforeAll / afterAll type setup en las testings unitarias, pero estoy teniendo algunos problemas. Parece que la funcionalidad interceptSpec es lo que quiero y la documentation menciona explícitamente que esto es bueno, por ejemplo, para limpiar los resources de la database, pero no puedo encontrar un buen ejemplo. Código a continuación:

 class MyTest : StringSpec() { lateinit var foo: String override fun interceptSpec(context: Spec, spec: () -> Unit) { foo = "foo" println("before spec - $foo") spec() println("after spec - $foo") } init { "some test" { println("inside test - $foo") } } } 

Esto da como resultado el siguiente resultado:

 before spec - foo kotlin.UninitializedPropertyAccessException: lateinit property foo has not been initialized ... stack trace omitted ... after spec - foo 

kotlintest 2.x crea una nueva instancia de caso de testing para cada testing. Puede cancelar ese indicador de borrado de comportamiento:

 override val oneInstancePerTest = false 

O agregue explícitamente sus interceptores para probar:

 val withFoo: (TestCaseContext, () -> Unit) -> Unit = { context, spec -> foo = "foo" spec() } init { "some test" { println("inside test - $foo") }.config(interceptors = listOf(withFoo)) }