1. kobakei

    Posted

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