Extienda la comprobación de Mockito para que Kotlin no funcione (de manera "kotlin")

Quiero extender la verificación para permitir el control de múltiples commands sobre el mismo object burlado, pero no está funcionando, se comstack pero al ejecutarlo no ejecuta cada command sobre el mismo.

Solo quiero evitar escribir más cosas como:

Mockito.verify(mockedView).initViews() Mockito.verify(mockedView).setImage(user.photoUrl) 

y escribe más como:

 Mockito.verify(mockedView){ initViews() setImage(user.photoUrl) } 

Primer bash:

 @Test fun onCreate_loadLoginInfo() { val user = MockUser.user() presenter.onCreate(mockedView, user) Mockito.myVerify(mockedView) { initViews() setImage(user.photoUrl) setName(user.name) setEmail(user.email) } } class Mockito { companion object } fun <T> Mockito.Companion.myVerify(obj: T, func: T.() -> Unit) { org.mockito.Mockito.verify(obj).func() } 

Segundo bash:

 @Test fun onCreate_loadLoginInfo() { val user = MockUser.user() presenter.onCreate(mockedView, user) Mockito.myVerify(mockedView) { it.initViews() it.setImage(user.photoUrl) it.setName(user.name) it.setEmail(user.email) } } class Mockito { companion object } fun <T> Mockito.Companion.myVerify(obj: T, func: (T) -> Unit) { val mock = org.mockito.Mockito.verify(obj) func(mock) } 

Pero esos no funcionan, todas las testings pasan incluso si no llamo a los methods en el presentador, ¿cómo puedo hacer esto?

Tuve los mismos problemas y escribí Fachada alnetworkingedor de Mockito . Mi biblioteca permite verificar pocas llamadas en torno a un object simulado:

 val list = mock(MutableList::class) list.add("String 1") list.add("String 2") list.size() verify(list) { times(2).add(anyString()) times(1).size() } 

Por favor, mira el file Léame, tal vez te pueda ayudar

Corrígeme si estoy equivocado. Desea evitar múltiples llamadas a verify() en su testing.

 @Test fun onCreate_loadLoginInfo() { // ... verify(mockedView).initViews() verify(mockedView).setImage(user.photoUrl) verify(mockedView).setName(user.name) verify(mockedView).setEmail(user.email) } 

Modifiqué tu segundo enfoque un poco:

 @Test fun onCreate_loadLoginInfo() { // ... verifyAll(mockedView) { it().initViews() it().setImage(user.photoUrl) it().setName(user.name) it().setEmail(user.email) } } fun <T> verifyAll(mock: T, func: (() -> T) -> Unit) { func { Mockito.verify(mock) } } 

Como puede ver ahora, estamos pasando un argumento funcional a func() y necesitamos usarlo apropiadamente (úselo como function, no como object).

Deberías hacerlo así. verify debe invocarse antes de cada invocación de método falso.

  • Anulación accidental: las siguientes declaraciones tienen la misma firma de JVM
  • Clase Kotlin no encontrada
  • Extensión sintética Kotlin para ver
  • Android Studio 3 no puede build fragments de kotlin
  • Por qué los numbers que aceptan nulos no son para preservar la identidad
  • La biblioteca de Android no puede comstackr kotlin
  • ¿Cómo funcionan las funciones de extensión de Kotlin?
  • La function Kotlin requiere nada, pero se define como un tipo diferente
  • Obligatorio <Objeto> y encontrado <Objeto>?
  • No se puede acceder a EditText u otros componentes de la interfaz de usuario con Kotlin