Creación de mockito mockito dentro de la creación simulada

El error que recibo es org.mockito.exceptions.misusing.UnfinishedStubbingException , con una de las posibles razones por las cuales "estás anulando el comportamiento de otro simulacro dentro antes de 'thenReturn' instrucción si se ha completado".

  val mockHttpHandlerContext = mock<HttpHandlerContext>().let { whenever(it.request).thenReturn(mock<HttpRequest>().let { whenever(it.queryParameters).thenReturn(mapOf( "itype" to listOf("msisdn"), "uid" to listOf(inputMsisdn) )) it }) whenever(it.scope()).thenReturn(ProcessingScope.of(Timings("test", 1000L))) it } 

¿Es la única solución para deshacerse de la creación simulada anidada? Realmente haría que el código fuera más difícil de entender, ¿tal vez hay una solución conocida?

El fragment de código es Kotlin.

A juzgar por el nombramiento, supongo que estás usando nhaarman / Mockito-Kotlin ?

Mockito es explícito, debe crear simulacros secuencialmente, pero hay algunas forms de invertir el order de la evaluación. Por ejemplo,

 val mockHttpHandlerContext2 = mock<HttpHandlerContext>() { mock<HttpRequest>() { on { queryParameters }.thenReturn(mapOf( "itype" to listOf("msisdn"), "uid" to listOf(inputMsisdn) )) }.let { on { request }.thenReturn(it) } on { scope() }.thenReturn(ProcessingScope.of(Timings("test", 1000L))) } 

Estoy aprovechando la sobrecarga de mock() con un KStubbing<T> , pero lo importante es crear el simulacro interno primero antes de usar .let para establecerlo en el talón.

Otra opción sería usar .thenAnswer para diferir la creación del simulacro interno hasta el momento en que se invoque el método stubbed.

 val mockHttpHandlerContext = mock<HttpHandlerContext>() { on { request }.thenAnswer { mock<HttpRequest>() { on { queryParameters }.thenReturn(mapOf( "itype" to listOf("msisdn"), "uid" to listOf(inputMsisdn) )) } } on { scope() }.thenReturn((ProcessingScope.of(Timings("test", 1000L))) } 

Tenga en count que esto creará un nuevo simulacro cada vez que se llame al método stubbed. Puede no ser deseable en algunas situaciones, como si desea realizar la verificación en el simulacro interno.

  • Cómo verificar la function de kotlin varargs usando mockito
  • MissingMethodInvocationException probando una class abierta en Kotlin
  • Cómo burlarse de una class final con mockito
  • Usando Mockito, ¿cómo espío la class Kotlin con la statement de campo val interface?
  • Cómo usar Mockito para Kotlin Fragment / Activity para simular kotlinx.android.synthetic views
  • ¿No es posible establecer expectativas sobre una propiedad perezosa?
  • java.lang.AbstractMethodError: método abstracto al ejecutar espresso en Kotlin con Mockito
  • ¿Cómo se testing el código que llama a funciones de nivel superior en Kotlin?
  • Fallar las testings de la unidad kotlin después del plugin de gradle 3.0
  • Prueba de unidad Kotlin para parámetro de function y object
  • Una class simple de kotlin con testing de mockito provocó MissingMethodInvocationException