web-dev-qa-db-ja.com

Androidユニットテストケースの自動化:Robolectricライブラリvs Androidテストフレームワーク

Androidアプリとライブラリ:Robolectricライブラリを使用するか、Androidテストフレームワークを使用することを推奨します。実行したい。コマンドラインでテストスイートを実行し、エミュレータを構成したり、ビルドマシンにデバイスを接続したりする必要がないようにします。これらのどちらか、またはより良いものについて比較分析を実行する人はいますか?あなたの経験は、私が決定するのに非常に役立ちますより良いソリューション。

47
bianca

私は階層化されたシステムを使用していますが、可能な場合は以前の階層を優先します。

  1. 純粋な単体テスト。 Android APIから完全に独立したできるだけ多くのコードを作成し、どのJVMでも実行できる「純粋な」ユニットテストを使用するようにしています。これらのテストは最速であり、コードの維持に役立ちますAndroid固有のポータブルである必要はありません。
  2. Robolectricがサポートする単体テスト。私のコードがAndroid APIsにわずかに依存しているだけで、Robolectricシャドウで満足できる場合は、Robolectricでテストします。Robolectricのセットアップ時間は、純粋なテストと比べて少し長くなりますが、エミュレータでの起動/実行よりもさらに高速です。
  3. Androidフレームワークテスト。 Robolectricがそれをカットしない場合-影が存在しないため、またはAndroid APIを頻繁に使用しているため(したがって、実際のものに対してテストしたいため))-テストを作成しますデフォルトのフレームワークでエミュレータ/デバイス上で実行されます。

層のポイントは、物事をできるだけシンプルに保つことです。これにより、スイート全体をより高速に保ち、よりクリーンなコードを促進することができます。

97
Jason Sankey

私は両方に取り組みました、私が見つけたものは:-

1)RobolectricはAPI 19をサポートしていません。ドキュメントに記載されています http://robolectric.org/Eclipse-quick-start/ 。それはそれの大きな欠点です。

2)Robolectricは、DVMではなくJVMで実行されます。そのため、特定の時間にデバイスでGPSが有効になっているかどうかなどを検出できません。事前に決定した値のみを渡すことができます。

3)Robolectricでのコードの記述はjunitよりも複雑で、特にフラグメントについては、多くの複雑さと問題があります。

4)Robolectricには外部jarと構成が必要であり、junitテストでは外部ライブラリは必要ありません。

5)RobolectricはJVMで実行されるため高速ですが、これには不利な点もあります。デバイスでUIが表示されず、実行されている画面コードがわかりません。

Androidの場合、jUnitテストが好きです。

11