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"]) }) }
メソッド呼び出しの引数についてテストしたい場合に便利です。