Android アプリとライブラリの単体テスト ケースを作成するのにどちらを選択するのがよいか考えてみましょう: Robolectric ライブラリを使用するか、Android Testing フレームワークを使用するか。コマンドラインでテストスイートを実行したいのですが、エミュレーターを構成したり、ビルドマシンにデバイスを接続したりする必要はありません。これらの両方またはより良いものについて比較分析を行っている人はいますか? あなたの経験は、より良い解決策を決定するのに大いに役立ちます。
2 に答える
私は階層化されたシステムを使用していますが、可能な場合は以前の階層を好みます。
- 純粋な単体テスト。できるだけ多くのコードを Android API から完全に独立させ、任意の JVM で実行できる「純粋な」単体テストを使用するようにしています。これらのテストは最速であり、Android 固有の移植性を必要としないコードを維持するのに役立ちます。
- Robolectric がサポートする単体テスト。私のコードが Android API にわずかしか依存していない場合は、Robolectric シャドウで満たすことができますが、Robolectric でテストします。純粋なテストに比べて Robolectric のセットアップ時間は少し長くなりますが、それでもエミュレーターで起動/実行するよりは高速です。
- Android フレームワークのテスト。Robolectric がそれをカットしない場合 - 影が存在しないため、または Android API を頻繁に使用している (したがって、本物に対してテストしたい) ため、エミュレーター/デバイスで実行するテストを作成します。デフォルトのフレームワーク。
層のポイントは、物事をできるだけシンプルに保つことです。これにより、完全なスイートが高速に保たれ、よりクリーンなコードが促進されます。
私は両方に取り組みました、私が見つけたのは:-
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 テストが好きです。