MockKでトップレベル関数をモックする


MockKでトップレベル関数をモックする方法をメモがてら記載します。

こんな log 関数があった場合。

Ext.kt
package com.example

fun log(message: String) {
    Log.d("log", message)
}

こんな感じで書けばOKでした。

ExtTest.kt
class ExtTest {

    @Test
    fun test_log() {
        mockkStatic("com.example.ExtKt") // ①
        every { log(any()) } just runs // ②

        // ・・・テストコード・・・
    }
}

ポイント

mockkStatic を使用し、トップレベル関数が定義されているクラスを指定します。
今回の場合、

  • package が com.example
  • ファイル名が Ext.kt

なので、 com.example.ExtKt を指定してあげればOK。

② あとは普通にMockKを使うのと同様に、 every を使って log 関数が呼ばれた場合の処理を指定してあげます。