mockito-kotlinを扱う
mockito-kotlinを扱う意義
CI/CD(継続的インテグレーション/継続的デリバリー)の重要性が高まる中、テストコードの実装も重要性があがっている。 単体テストを実装する上で必須のテクニックとなるのがモック化(Mocking)。
モック化とは、テスト対象の機能が依存している他の機能(依存オブジェクト)の影響を受けないようにするためにあらかじめその依存オブジェクトに固定の値を返させたり、特定の振る舞いをさせるように設定しておくこと。これによりテストが安定し、不必要な結合が排除された疎結合なテストコードを実装できる。
mockito-kotlinは、Javaで広く使われているモックフレームワーク Mockito
をKotlinで簡単に利用できるようにするライブラリ。
build.gradle
に依存関係を追加
build.gradle
のdependencies
に以下を追記します。単体テスト用なのでtestImplementation
スコープで追加する。
dependencies {
testImplementation "org.mockito.kotlin:mockito-kotlin:5.3.1"
}
それでは、mockito-kotlin
を使ったモック化の実装方法を解説します。
1. 戻り値の固定化
特定のメソッドが呼び出されたときに、固定の値を返すように設定する。
mock
関数でモックオブジェクトを生成し、on { メソッド() } doReturn 戻り値
の形式で振る舞いを定義する。
// Sampleクラスのモックを作成し、sample()が呼ばれたら "sample" を返すように設定
val mock = mock<Sample> {
on { sample() } doReturn "sample"
}
2. 例外を投げる
メソッドが呼ばれた時に特定の例外をスローするモックの実装は、doThrow
で例外を指定する。
// sample()が呼ばれたら IllegalStateException をスローするように設定
val mock = mock<Sample> {
on { sample() } doThrow IllegalStateException()
}
3. 振る舞いの指定
メソッドが呼ばれた時に、より複雑な処理(例:引数を使った演算や状態の変更など)を実行させる場合は、doAnswer
を使用する。
// sample()が呼ばれた時に、特定の処理(ここではコメントのみ)を実行するように設定
val mock = mock<Sample> {
on { sample() } doAnswer {
// do anything. (具体的な振る舞いロジック)
}
}
最終更新: 2025.9.28