Android UnitTest作成:MockとMockitoの違い、用途の違いについて

#Android
writtdden by 上様

こんにちは
Androidエンジニア見習い 上様です。

新年を迎え、今年の抱負は「抱負を忘れない」、「脱、三日坊主」にしようと決めました。笑
そんな中、見習いの僕は引き続きKotlinの学習を続けております!!

以前の記事は、アーキテクチャについて学んだことを共有しておりますのでそちらもご覧ください

【Kotlin】Androidアプリ開発のためのMVPアーキテクチャガイド

Android Kotlinにおけるチェーンメソッドの活用

 
Android Javaを学んでいたこともあり、事前準備としてはバッチリだと思いたい。笑
Kotlinでのアプリ開発で疑問に思い、今回学習したMockk、Mockitoとは、なんぞや!という課題に対して学習した内容を共有させていただきます!!
 

モック(Mock)とは何か?

モック(Mock)とは、テスト対象のコードからの依存関係をシミュレートするためのオブジェクト。モックを使用することで、テスト対象のコードを独立してテストすることができる。モック(Mock)は、実際のオブジェクトの代わりに振る舞い、依存関係に影響されずにテストを実行することが可能です。したがって、実際のデータを使わずにテストを実行することができます。

・モック(Mock)のメリット

  1. 依存関係の管理:外部リソース(データベース、ネットワークなど)に依存しないテストが可能。
  2. テストの安定性:外部要因によるテスト結果の不安定さを排除できる。
  3. テスト実行がはやい:実際の外部リソースを使用しないため、テストがはやく実行されます。

・モック(Mock)の注意点

モックの使用には注意が必要です。以下の点に留意することで、モックを適切に管理できます。

  1. 過度なモック化を避ける:全ての依存関係をモック化すると、テストが複雑になりすぎることがあります。必要な部分だけをモック化しましょう。
  2. 実装との乖離に注意:モックが実際のオブジェクトと一致しない場合、テスト結果が本来の結果と異なり、信頼できなくなる可能性があります。

Mockkとは何か?

Mockkは、Kotlin向けのモッキングライブラリです。Kotlinの機能を最大限に活用しており、Kotlinのコードを自然にモックすることができます。Mockkは、従来のモッキングフレームワークでは扱いづらいKotlin固有の機能(デフォルトパラメータ、コルーチンなど)に対応している点が特徴です。

僕も現場でコルーチンなどを扱うことがあり、こちらのMockkを使用しております!

・Mockkのメリット

  1. Kotlinとの親和性:Kotlin向けに設計されているため、Kotlinのコードを自然にモックできます。
  2. 簡単なセットアップ:モックの作成や振る舞いの定義が容易です。
  3. 豊富な機能:コルーチンのサポート、拡張関数のモック、スロットのキャプチャなど、多くの機能が提供されています。

・Mockkの注意点

Mockkを使用する際には、以下の点に注意する必要があります。

  1. バージョン管理:Mockkは頻繁に更新されるため、依存関係のバージョン管理に注意が必要です。新しいバージョンで互換性の問題が発生することがあります。
  2. Kotlin特有の機能の理解:MockkはKotlin特有の機能に対応していますが、それらの機能を正しく理解していないと誤ったモックを作成してしまう可能性があります。

Mockitoとは何か?

Mockitoは、JavaおよびAndroidアプリケーションのユニットテストで広く使用されるモッキングフレームワークです。Kotlinでも使用可能であり、多くのプロジェクトで採用されています。Mockitoを使用することで、モックオブジェクトを簡単に作成し、その振る舞いを定義することができます。

・Mockitoのメリット

  1. 広範なサポート:JavaおよびKotlin両方に対応しており、豊富なドキュメントとコミュニティサポートが利用できます。
  2. シンプルなAPI:直感的でシンプルなAPIにより、容易にモックオブジェクトを作成・操作できます。
  3. 柔軟な振る舞い定義:when()やthenReturn()メソッドを使用して、モックの振る舞いを柔軟に定義できます。

・Mockitoの注意点

Mockitoを使用する際には、以下の点に注意する必要があります。

  1. Kotlinとの互換性:MockitoはもともとJava向けに設計されているため、Kotlinの一部の機能に対しては対応が不十分な場合があります。これには、デフォルトパラメータやトップレベル関数のモックなどが含まれます。
  2. 設定の複雑さ:Mockitoの設定が複雑になることがあり、特に複雑な依存関係がある場合には注意が必要です。

MockkとMockitoの違い

基本的な違い

MockkはKotlin専用のモッキングフレームワークであり、Kotlinの機能を自然に扱うことができます。一方、MockitoはJavaおよびKotlinの両方に対応している汎用的なモッキングフレームワークです。Kotlinのプロジェクトにおいては、Mockkの方が自然で使いやすい場合がありますが、既存のJavaプロジェクトや混在プロジェクトではMockitoが引き続き有用です。

用途の違い

・Mockkの用途

Mockkは、Kotlinプロジェクトで特に効果を発揮します。以下のようなシナリオでMockkが役立ちます。

  1. Kotlin固有の機能を利用する場合:デフォルトパラメータ、コルーチン、拡張関数など、Kotlin固有の機能をモックする必要がある場合。
  2. シンプルなテストコードを求める場合:MockkはKotlin向けに最適化されているため、テストコードがシンプルで読みやすくなります。

・Mockitoの用途

Mockitoは、JavaおよびKotlinの混在プロジェクトや、既存のJavaプロジェクトで効果を発揮します。以下のようなシナリオでMockitoが役立ちます。

  1. 既存のJavaプロジェクト:Java向けに設計されているため、既存のJavaプロジェクトでそのまま使用できます。
  2. 広範なサポートが必要な場合:豊富なドキュメントとコミュニティサポートが利用できるため、トラブルシューティングが容易です。

 

まとめ

今回MockkとMockitoの用途の違いや、使い方の違いについて紹介させていただきました! テストの作成時に使うことがあるMock関連のライブラリについてでしたがいかがでしょうか 今現在学習最中の新米からのまとめになりますので、極力難しい言葉などを使わずに説明いたしましたが実際に実装してみないとわからないところは多くありますので、やってみるというのも一つの手だと思います! 以上、見習いエンジニア上様でした! またどこかで!!

Favorite