MockKを使ってて便利だった関数たち
MockKにお世話になっていて、便利だった関数をいくつかご紹介します。
confirmVerified
verifyですべての呼び出しが検証されたかをチェックすることができます。
たとえば「ボタンがクリックされたときにアナリティクスイベントを記録する」という挙動をテストしたいというケースで、このようにテストを書いたとします。(ViewModelでクリックイベントをハンドリングしたとする)
val analytics: AnalyticsManager = mockk(relaxed = true)
// テスト対象を生成
val viewModel: HogeViewModel = createViewModel(analytics = analytics)
viewModel.onClickButton()
verify(exactly = 1) {
analytics.logCustomEvent(Event.TapButton)
}
// analyticsの呼び出しすべてを検証したかをチェック
confirmVerified(analytics)
このとき、HogeViewModel#onClickButtonを呼び出した際にanalyticsに対してverifyで検証したもの以外の呼び出しがあったときに、confirmVerifiedは例外をスローしてくれます。
予期せぬ呼び出しがないかや、検証の漏れがないかという場合に便利です。
ofType
マッチャーのひとつで、値の型をチェックすることができます。
通常の検証ではeq(value)が使われますが、ものによってはequalsの比較の検証が難しい場合もあります。
val analytics: AnalyticsManager = mockk(relaxed = true)
// テスト対象を生成
val viewModel: HogeViewModel = createViewModel(analytics = analytics)
viewModel.onClickSave()
verify(exactly = 1) {
// Event.Saveという型のイベントが記録されたことを検証
analytics.logCustomEvent(ofType(Event.Save::class))
}
このように書くと、AnalyticsManager#logCustomEventに渡したパラメータがEvent.Saveであることを検証できます。
withArg
こちらもマッチャーの一つで、検証するパラメータについてコードの実行が可能なため、ofTypeより’柔軟に検証することができます。
こちらはMockKVerificationScope内でのみ使うことができます。
val analytics: AnalyticsManager = mockk(relaxed = true)
// テスト対象を生成
val viewModel: HogeViewModel = createViewModel(analytics = analytics)
viewModel.onClickSave()
verify(exactly = 1) {
// 引数についてAssertで詳細に検証
analytics.logCustomEvent(withArg { event: Event ->
Assert.assertEquals(1234, event.params["user_id"])
Assert.assertEquals("hoge", event.params["type"])
})
}
メソッド呼び出しの引数についてテストしたい場合に便利です。