web-dev-qa-db-ja.com

JUnit +(AndroidのRobolectricまたはMockitoまたは両方)を使用した単体テストケース

Androidで単体テストケースを作成するのは初めてです。

だから私は多くのものを検索しました。

  1. Robolectric framewordk-JVMで実行
  2. Mockito Framwork-オブジェクトのモック

ですから、ロボエレクトリックとモキトには疑問があります。

  1. Robolectricは、AndroidアプリのJUnitでのみ使用する必要がありますか?
  2. AndroidアプリのJUnitでのみMockitoを使用する必要がありますか?
  3. 両方のフレームワークを使用する必要がありますか?
  4. MockitoとRobolectricの違いは何ですか?

MokitoとRobolectricの違いを探していますが、適切な答えが得られません。

提案してください。

32

それらはわずかに異なる使用法を持ち、私は私のプロジェクトで両方を使用する傾向があります。

Mockito

yourクラスのモックを作成するために使用されます。

特定のクラスをテストするときは、Mockitoですべての依存関係をモックします。

可能な場合は、ほとんどのテストでmockitoを使用する必要があります。これを可能にするために、ほとんどの人はコードをMVPなどに分割し、ビジネスロジックとビューロジックを分離しています。このように、ビジネスロジック(Presenter)はAndroidライブラリに関する知識(または依存関係)を持たず、それらのモックを持つ必要はありません。

Robolectric

Androidクラスの多くのモックを含むライブラリです。

Robolectricテストランナーは、テストの実行時に、実際のAndroidクラスの代わりにこれらの「シャドウオブジェクト」を挿入します。これにより、Androidのインスタンスを起動せずにJVMでテストを実行できます。

MVPを使用する場合、ビューレイヤーはアクティビティ/フラグメントによって実装される傾向があり、ここでRobolectricを使用してこれらをモックできます。

メモ

Robolectricは必要な場合にのみ使用してください。基本的にAndroidフレームワークの一部を再実装しますが、常に同じ方法であるとは限りません。

PowerMockなどのanotherライブラリも必要になる場合があります。これにより、Mathなどの静的クラスのモックが可能になります。または、TextUtilsなどの静的クラスAndroidクラスのモックに使用できます。

両方ともJUnitで使用されます

42
Jahnold

Mockitoだけでほとんどのケースをカバーできます。

ただし、Robolectricは、Android Activity-またはFragmentなどのコンポーネントnit Test(Android SDK)。エミュレータやデバイスを必要とせず、計測テストよりもかなり高速です。

私の提案:ユニットテストにはMockitoを、UIテストにはEspressoを使用してください。これらはAndroidの半公式のテストフレームワークです。

Android SDK。に依存関係がある場合は、ユニットテストにRobolectricを追加します。

12
Eric Liu