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 } 
  • ¿Qué es el equivalente java de los types de funciones de Kotlin?
  • nullPointerException en shanetworkingpreferences class auxiliar Al ejecutar una testing
  • Mocking methods de Kotlin con Java + Mockito
  • ¿Cómo burlarse del object de Kotlin usando Mockito / PowerMockito?
  • Mocking interfaces genéricas con Kotlin y Mockito
  • solo se permiten classs en el lado izquierdo de un literal de class al usar Mockito y kotlin
  • Kotlin: ¿Alinear manualmente una function genérica produce un resultado diferente?
  • Cómo alinear manualmente la diversión de Kotlin con <reified T: Any>
  • Prueba de unidad Kotlin para parámetro de function y object
  • Mockito se burla de comportarse como espías: Kotlin
  • ¿Cuál es la solución adecuada para @BeforeAll en Kotlin?