web-dev-qa-db-ja.com

Android kotlinを使用した単体テストのオブジェクトのモック-any()はnullを返します

クラスをテストしようとしています。staticクラスをモックする必要があります。私のコードは次のとおりです:-

    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))

しかし、2行目ではエラーがスローされます。

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

私は mockito-kotlinbefriending-kotlin-and-mockito を使用して、終了せずに試しました。あなたはそれを修正する方法を知っていますか?

13
aloj

Mockitoはany()を呼び出すとnullを返すことが多く、kotlinのnullではないパラメーターが壊れます。

Mockito-kotlinでは、それらに anyOrNull() と呼ばれる別の関数があります。

独自の関数を作成することもできます here 彼らはこれもうまくいくはずだと言っています。

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

テストクラスに次のコードを追加します。

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

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