Android Testing Codelabやってみた
Android Testing CodelabはEspressoなどのテストツールの使い方を学べるサンプルです。
全篇Englishですが、大体雰囲気でわかるレベルだと思います。
このレッスンをやれば、アプリ開発におけるテストツールの使い方、
- JUnitを使ったユニットテスト(Andoridの端末を必要としないテスト)
- Espressoを使ったUIテスト(実機orエミュレータを必要とするテスト)
が学べます。
ちょっとお得だなと思ったのが、アプリがMVPパターンで作られていることです。テストツールの使い方の勉強のついでに、MVPパターンも学べるなんて一石二鳥だな、なんて思ったのでちょっとやってみました。
思っていたよりもざっくりとした解説なので、雰囲気をつかめるものくらいに考えるといいと思います。
それでもテストのやり方よく分かっていない私からすると、学びの多いレッスンでした。
このサンプルではパッケージをレイヤーごとではなく機能ごとに分けてありました。(機能ごとというよりはActivityごとに近い分け方だと思いましたが)
私はこれまでずっと、ModelはModelパッケージに、というレイヤーごとにパッケージを分けていましたが、「機能ごとに分けた方が見やすくていいだろ」と書かれていて目からうろこでした。
テストのためにモック用のクラスに差し替えるやり方の解説があります。
XMLのリソースファイル(strings.xmlなど)は異なるFlavorで同一のリソース名が存在した場合、Flavorのものが優先されmainで定義したリソースは上書きされます。
一方でJavaのクラスだと挙動が異なり、同一名のクラスが存在するとエラーになります。そのため、全てのFlavor共通で利用するクラスだけをmainに配置し、切り替えが必要なクラスはFlavorのディレクトリに配置するという工夫が必要になります。
Mockitoを使ったJUnit4のテストのやり方が勉強になりました。これは単純に私がMockitoの使い方がよく分かっていなかったからですが。
@Mockアノテーションに寄る初期化とか、ArgumentCaptorの使い方とか。
Espresso-IntentsによるIntentのモック方法、Espresso-Contribを使ったナビゲーションドロワーのUIテストなどが紹介されています。
Espressoテストの章になると、一部修正が必要な部分がありましたが、それもまた勉強になりました。(EditTextへ文字入力をエミュレートした後は、croseKeyboard()しないとエラーになるとか、上へボタンを参照する部分が英語以外の環境だとエラーになるとか)