El order de ejecución de los grupos es incorrecto en Kotlin Spek

Aquí está mi testing:

object MySpek : Spek({ val myMock1: MyMock1 = mock() val myMock2: MyMock2 = mock() val handler = StartModeHandler(myMock1, myMock2) val session = mock<Session> { on { user }.doReturn(User.builder().withUserId("userId").build()) } describe("item exists for user") { beforeGroup { reset(digitalPointDao, trackDao) } whenever(myMock1.loadItem(session.user.userId)).thenReturn(Optional.of(MyItem())) whenever(myMock2.loadSomething()).thenReturn(ArrayList()) context("method onLaunch was called") { val response = handler.onLaunch(session) it("should return the response for existing user") { //some asserts here } it("should save the item") { //some mock verifies here } } } }) 

De acuerdo con la documentation de Spek, espero que el flujo sea el siguiente:

  1. Inicializar todo antes de describir
  2. llamar antes del grupo
  3. initalize describir el cuerpo, por ejemplo, mi siempre llamadas para burlas
  4. ejecutar context
  5. ejecutar cada método

Pero obtengo el siguiente flujo:

  1. Inicializar todo antes de describir
  2. ejecutar mi describir el cuerpo, por ejemplo, mi cada vez que llama a burlas
  3. ejecutar context
  4. correr antes del grupo
  5. ejecutar cada método

¿Extraño algo y estoy haciendo algo mal aquí?

Como se menciona en los scopes del grupo de documentation de Spek (dado, describir, context) ejecutará ansiosamente cualquier código dentro. Cualquier initialization de estado de testing debe realizarse dentro de los dispositivos (antes de cada testing, antes del grupo, etc.). También puede usar memoized para crear una dependencia vinculada al ciclo de vida de Spek.

 object MySpek: Spek({ val myMock1 by memoized { mock<myMock1>() } val myMock2 by memoized { mock<myMock2>() } val handler by memoized { StartModeHandler(myMock1, myMock2) } val session by memoized { mock<Session> { on { user }.doReturn(User.builder().withUserId("userId").build()) } } describe("item exists for user") { beforeEachTest { reset(digitalPointDao, trackDao) whenever(myMock1.loadItem(session.user.userId)).thenReturn(Optional.of(MyItem())) whenever(myMock2.loadSomething()).thenReturn(ArrayList()) } // use on instead of context on("method onLaunch was called") { val response = handler.onLaunch(session) it("should return the response for existing user") { //some asserts here } it("should save the item") { //some mock verifies here } } } })