Googleが公式に提供しているドキュメントをベースにして、どういうテストがあるのか俯瞰できるようにまとめてみました。
(全て自分で試したわけではありません)
細かい導入方法は各公式ドキュメントで最新情報を確認してください。
対象読者
JUnitやRSpec等の使用経験があり、自動テストの一般的な知識がある方
Androidテストの分類
※ 以下のドキュメントを元に、テストの目的・スコープ別に分類しています。
http://developer.android.com/intl/ja/tools/testing/testing_android.html
※ 実際にはEspressoがInstrumentedなAPIを利用していたりして、それぞれのテストが独立しているわけではないので注意してください。
ユニットテスト
各クラスの単体テスト。Androidフレームワークに依存するクラスかどうかで選択肢が変わる。
ローカルでのユニットテスト
ローカルのJVM上で動かすので高速で実行コスト小。
積極的に書くべきテスト。
一般的なユニットテストなので、アプリをやってこなかった人でもとっつきやすい。
- スコープ
- Androidフレームワークに依存しないクラス(or Android依存部分はMockitoでモック化)
e.g. ○○UtilTest
- 導入方法
Instrumentedなユニットテスト
※まだ試してません!
エミュレータor実機上で動かす。実行コスト大。
ローカルユニットテストでのモック化が難しい時、面倒な時に使う。
- スコープ
- Activity等のAndroidフレームワークに依存するクラスの単体テスト
- モック化が難しい時に使う? 後述するRobolectricの方が使い勝手良さそう。
- 導入方法
Robolectric
※まだ試してません!
Google公式ではないが、実績多数。開発も活発。
ローカルのJVM上で動かすので高速で実行コスト小。
Mockito等の一般的なモック用ライブラリを使用せずに使える。
- スコープ
- Activity等のAndroidフレームワークに依存するクラスの単体テスト
- Activity等のAndroidフレームワークに依存するクラスの単体テスト
- 導入方法
結合テスト(機能テスト、UIテスト)
「この画面でこのボタンをタップしたらこうなる」といった、実際のユーザーから見たアプリの機能のテスト。
アプリの最終的な品質を担保するという意味では、ユニットテストより重要。
ただし、ユニットテストと比べて自動化しづらい部分があるので、必要に応じてテスターによるマニュアルのテストも併用する。
Espresso
WebアプリでいうSeleniumのようなUIテストが書ける。
- スコープ
- アプリ内で完結する機能テスト
e.g. 検索ボックスにテキストを入力して検索すると、結果のリストが表示される
- 導入方法
UIAutomator
※まだ試してません!
- スコープ
- 他のアプリやシステムと連携する機能テスト
e.g. デフォルトカメラアプリを起動する、他のSNSアプリでシェアする
- 導入方法
最後に
Androidのテストいろいろありすぎて何から手を付けて良いのか迷いますね。。
アプリやってこなかった人がとりあえず書いてみるという意味では、ピュアなJavaクラスのローカルで動かすユニットテストから始めるのが良いと思います。
アプリ開発での有効なテストという意味では、Espressoを使用したUIテストで主要機能を担保しておくのがよいかなぁと思いました。導入も楽です。
Androidのテスティングフレームワークは乱立してますが、ドキュメントもそれなりに充実してます。
時間のある人は公式ドキュメントから辿ってみるとよさそうです。
- http://developer.android.com/intl/ja/tools/testing/index.html
- http://developer.android.com/intl/ja/training/testing/index.html
Androidアプリ開発、まだ始めたばかりなので、いろいろ試してまた更新します。