Burlarse de las interfaces con Kotlin y Mockito

Realmente no entiendo la interfaz burlona en Kotlin. No estoy seguro si esto es específico de Kotlin o también se aplica a Java. Hasta ahora solo lo he probado en Kotlin.

Tengo una class burlada con interfaces:

val mockObj = mock(MyClass::class.java, withSettings().extraInterfaces(IMyInterface::class.java) 

ahora, esto produce el siguiente problema en IntelliJ:

 `when`(mockObj.someMethod()).thenReturn(0.1) 

el someMethod() será rojo (supongo que esto depende del esquema de color, pero se entiende la idea: un problema: reference no resuelta )

para resolver esto, simplemente incluyo esta línea antes:

 val mockInterface = mockObj as IMyInterface 

el simulacro se subrayará en gris, porque nunca se usa . Todavía uso mockObj para when

sin embargo, esto hace que el rojo desaparezca

No estoy seguro de por qué esto funciona … ¿alguien puede explicar la teoría?

para deshacerse del subrayado gris, val mockInterface =

entonces mi línea mágica se networkinguce a mockObj as IMyInterface

El tipo de devolución de mock(MyClass::class.java) es MyClass . El object devuelto también es una instancia de IMyInterface, ya que se lo pidió a Mockito, pero el comstackdor de Kotlin no puede saberlo.

mockObj as IMyInterface le dice al comstackdor de Kotlin que lance mockObj a IMyInterface. Dado que el comstackdor de Kotlin es compatible con las versiones inteligentes , sabe que, si esta línea no arroja ninguna exception, entonces mockObj es una instancia de IMyInterface. Y, por lo tanto, le permite llamar a someMethod() e inserta el model necesario para usted.

Puede replicar esto con un ejemplo más simple:

 val foo: Any = "hello" val bar = foo as String println(foo.length) // smart cast added here 

También puede usar el operador is para hacer que el comstackdor inserte un molde inteligente

 val foo: Any = "hello" if (foo is String) { println(foo.length) // smart cast added here } 
  • NoSuchMethodError: no hay método estático beforeCheckcastToFunctionOfArity
  • Mocking interfaces genéricas con Kotlin y Mockito
  • Una class simple de kotlin con testing de mockito provocó MissingMethodInvocationException
  • ¿Cuál es la solución adecuada para @BeforeAll en Kotlin?
  • Mockito con Kotlin probando la falla asincrónica
  • Android Kotlin: burlarse de una function gratuita usando Mockito / PowerMock
  • SpringBoot ArrayIndexOutOfBoundsException MethodParameter.getGenericParameterType
  • Cómo burlarse de una class final con mockito
  • ¿Por qué Mockito no puede burlarse de un tipo de parámetro genérico con el tipo de número en Kotlin?
  • ¿Cómo verificar la llamada en setter en kotlin usando mockito?
  • MissingMethodInvocationException probando una class abierta en Kotlin