es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Estoy intentando usar mockk anyConstructed pero terminando con llamadas faltantes dentro de cada bloque { … }

Estoy tratando de devolver un objeto siempre que se crea un nuevo objeto de una clase.

He intentado usar anyConstructed con un objeto spyk o incluso un objeto mockk de PredictionCheckFunction.

every { anyConstructed<predictioncheckfunction>() } answers { predictionCheckFunction }

Esto resulta en el siguiente error en la línea de arriba:

io.mockk.MockKException: Llamadas faltantes dentro del bloque every { ... }.

En Mockito haría algo como esto:

whenNew(PredictionCheckFunction.class).withNoArguments().thenReturn(predictionCheckFunction);

Quiero asegurarme de que cada creación de PredictionCheckFunction resulte en un objeto predictionCheckFunction.

El ejemplo en esta pregunta https://stackoverflow.com/questions/52742926/how-to-mock-a-new-object-using-mockk me permite ejecutar solo una función en un objeto mock, pero no devolver uno ya creado como en el ejemplo de Mockito anterior thenReturn(predictionCheckFunction);.

Ejemplo en la pregunta SO mencionada:

mockkConstructor(Dog::class)
every { anyConstructed<dog>().bark() }

Cualquier ayuda sobre cómo hacer esto durante la creación de un nuevo objeto será apreciada.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para devolver un objeto cada vez que se crea un objeto nuevo de una clase en Kotlin, puedes usar la función mockkConstructor() de la librería MockK. Aquí tienes un ejemplo:

    mockkConstructor(PredictionCheckFunction::class)
    every { anyConstructed<predictioncheckfunction>() } returns predictionCheckFunction
    

    Este código simulará el constructor de la clase PredictionCheckFunction y devolverá el objeto predictionCheckFunction cada vez que se cree un objeto nuevo de la clase.

    Ten en cuenta que la función anyConstructed() se utiliza para coincidir con cualquier llamada al constructor de la clase simulada. También puedes usar la función specificConstructor() para coincidir con una llamada de constructor específica.

    Si te encuentras con el error “Missing calls inside every { … } block”, significa que debes agregar al menos un comportamiento simulado dentro del bloque every { ... }. En el ejemplo anterior, agregamos el comportamiento simulado returns predictionCheckFunction.

    ¡Espero que esto sea de ayuda!

Comments are closed.