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.

  • Clase Kotlin no encontrada
  • Prueba unitaria de la function de extensión de Kotlin en las classs de Android SDK
  • Hacer clic en una vista de text para cambiar el fragment
  • Android Studio 3 no puede build fragments de kotlin
  • Kotlin || ¿No puedo agregar la biblioteca a Mi aplicación?
  • Extensiones en Kotlin
  • ¿Cómo funcionan las funciones de extensión de Kotlin?
  • El tipo Out-Projected 'ArrayList <*>' prohíbe el uso de 'public fun fun add (índice: Int, elemento: E): Unidad definida en java.util.ArrayList'
  • ¿Cómo crear un button en Kotlin que abre una nueva actividad (Android Studio)?
  • Quiero agregar mi versión de kotlin al proyecto Gradel