どうも。どっことです。今回は、mockito-kotlin
ライブラリを使ったKotlin
での単体テストの書き方を紹介します。
mockito-kotlinを使ったモック化
CI/CDの重要性が注目されて久しいですが、単体テストをはじめとしたテストコードを実装できるエンジニアはまだまだ多くありません。またテストコードは実装経験あるけど、いざ実装しようとした時に「あれってどうやるんだっけ」となるような、テストコードの実装がまだ手に馴染んでいない人も多いかと思います。
今回は単体テストのテストコードを実装する上で必須のテクニックとなるモック化について紹介したいと思います。
モック化とは
他の機能の影響によりテストが不安定な状態となることを防ぐため、あらかじめ固定の値を返したり、特定の振る舞いをさせるように指定しておくことです。
実装方法
以下の順に解説していきます。
- 使用するライブラリ(
mockito-kotlin
ライブラリの紹介) - 導入方法
- 実装方法
使用するライブラリ
オブジェクトをモック化するにあたり、JavaやKotlinではさまざまなモック化ライブラリが公開されています。今回はその中のひとつであるmockito-kotlin
を使った導入・実装方法を解説していきます。
mockito-kotlin
もともとJavaのモックフレームワークとして利用されているMockito
ライブラリを、Kotlinでも簡単に利用できるような機能を具備しているライブラリがmockito-kotlin
です。公式ページを参考欄に載せておくので、詳しい情報をお探しの方はそちらを参照してください。
導入方法
いつものごとく、build.gradleのdependenciesに追記します。以下を追加してください。
dependencies {
testImplementation "org.mockito.kotlin:mockito-kotlin:5.3.1"
}
実装方法
それでは、モック化する実装方法について解説します。
モック化の実装①戻り値の固定化
戻り値を固定化する実装は以下です。
mock
でモックするクラス、on
でモックするメソッドを指定します。そしてdoReturn
で戻り値を指定します。
val mock = mock<Sample> {
on { sample() } doReturn "sample"
}
モック化の実装②例外
メソッドが呼ばれた時に特定の例外を投げるようなモックの実装は以下です。doThrow
で例外を指定します。
val mock = mock<Sample> {
on { sample() } doThrow IllegalStateException()
}
モック化の実装③振る舞いの指定
メソッドが呼ばれた時に特定の振る舞いをさせるモックの実装は以下です。doAnswer
で具体的な振る舞いを指定します。
val mock = mock<Sample> {
on { sample() } doAnswer {
// do anything.
}
}
まとめ
今回は、テストコードを実装する上で必要不可欠なテクニックであるモック化をmockito-kotlin
ライブラリを使って実装する方法について解説しました。他の機能に依存しない疎結合なテストコードを実装するためにモック化は重要なテクニックとなるので、手に馴染むまで何度も実装しましょう。