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.

  • Extensión sintética Kotlin para ver
  • Android Studio 3 no puede build fragments de kotlin
  • ¿Cómo funcionan las funciones de extensión de Kotlin?
  • Quiero agregar mi versión de kotlin al proyecto Gradel
  • No se puede acceder a EditText u otros componentes de la interfaz de usuario con Kotlin
  • Clases de Kotlin sin llaves
  • La biblioteca de Android no puede comstackr kotlin
  • Cómo crear callbacks de funciones anidadas como anko - syntax DSL Kotlin
  • En Kotlin Lenguaje de progtwigción importancia de varargs en términos de usos
  • Por qué los numbers que aceptan nulos no son para preservar la identidad