web-dev-qa-db-fra.com

Objet simulé dans Android Test unitaire avec kotlin - any () donne null

J'essaie de tester mes classes et je dois me moquer d'une classe static. Mon code est le suivant: -

    PowerMockito.mockStatic(ToolTipUtil::class.Java)
    PowerMockito.`when`(ToolTipUtil.wasToolTipShown(any(Context::class.Java), "")).thenReturn(true)
    val context = mock(Context::class.Java)

    presenter.onResume(context)

    verify(view).setMenuButtonShown(eq(false))

Mais dans la deuxième ligne, il lance une erreur:

"Java.lang.IllegalStateException: any(Context::class.Java) must not be null"

J'ai essayé avec mockito-kotlin et befriending-kotlin-and-mockito sans aucune sortie. Savez-vous comment y remédier?

13
aloj

Mockito retourne souvent null lorsque vous appelez any() et cela casse les paramètres non null de kotlin.

Dans mockito-kotlin, ils ont une fonction distincte pour cela, appelée anyOrNull () .

Vous pouvez également créer votre propre fonction, ici ils disent que cela devrait également fonctionner.

/**
 * Returns Mockito.any() as nullable type to avoid Java.lang.IllegalStateException when
 * null is returned.
 */
fun <T> any(): T = Mockito.any<T>()  
11
TpoM6oH

Ajoutez le code suivant dans votre classe de test:

private fun <T> any(type : Class<T>): T {
    Mockito.any(type)
    return uninitialized()
}

private fun <T> uninitialized(): T = null as T
3
Amrita