🌊
MockKで引数をキャプチャする方法
例えば
fun example(flg: Boolean){
val arg = if(flg) "true" else "false"
mockObj.call(arg)
}
というコードがあったとします。
もしテストを書くなら、flgによってcall()に渡される引数が正しい値が入ってるかどうかを書くかなと思います。(ここは例であって大して大事じゃない前提なので適当です。)
そういう時に、どうすればMoccKで確認できるかという内容です。
Mockitoの場合
MockitoだとArgumentCaptor
というのを使うというのがすぐに出てきます。
こっちは本筋じゃないので解説なしです。
MockKの場合
CapturingSlot
というのを使えます。
今回の場合だと
@Test
fun exampleTest_true(){
val argSlot = slot<String>()
every{ mockObj.call(capture(argSlot) } returns Unit
subject.example(true)
assertEquals("true", argSlot.captured)
}
で引数に渡した値を確認できます。
おわり
Mockitoの場合だとすぐに解決方法出てきた割にMockKの場合の方法がそれに比べるとパッと出てこなかったので記事に書きました。
参考にした記事は↓です。
Discussion