対象読者
- Androidのテストをこれから書きたい人
- Androidのテストを書こうとして挫折した人
- Androidのテストフレームワークが乱立していて迷子になった人
- つまり俺
単体テスト
-
公式のトレーニングには、JVMで実行する方法と実機orエミュレータで実行する方法が書いてあるが、微妙。
- JVMで実行する場合
- まったくAndroid frameworkに依存しないクラスは問題ない
- Android frameworkに依存するクラスの場合、Mockitoを使ってAndroid frameworkをモック化する必要があってめんどくさい
- 実機orエミュレータの場合
- 実行速度が遅い
- JVMで実行する場合
-
Robolectricを使って書くのがおすすめ
- Android frameworkに依存したテストもJVMで実行できる
- JVMなので高速
- 実績多数。現在も開発も活発。
- Android frameworkに依存したテストもJVMで実行できる
- 他のクラスに依存するクラスのテストの場合は、依存するクラスをモックに差し替えてテストする
- 例:APIクライアントをモック化して、いつも同じ値を返すようにする
- Dagger 2など依存性注入フレームワークを入れるておくと、テストのときだけ差し替えやすい
結合テスト
-
公式のトレーニングに従えば良い
- 自分のアプリのみが対象なら、Espressoを使って書く
- 基本はこっち
- 複数のアプリをまたぐ場合は、UI Automatorを使って書く
- Googleログインとか、システムのモーダルを操作する場合とか
- Espressoと混ぜて使っても良い
- UI Automatorはver 2になって色々変わっている。DroidKaigi 2016の講演が詳しいので参考に: http://sumio.hatenablog.com/entry/2016/02/22/235625
- 自分のアプリのみが対象なら、Espressoを使って書く
まとめ
- 単体テストはRobolectricを使って書いてJVMで実行する
- 結合テストは基本Espresso、一部UI Automatorを使って実機 or エミュレータで実行する
- サンプルプロジェクトを作った https://github.com/kobakei/Android-HowToTest