月別: 2016年1月

Android Testing Codelabやってみた

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

Android Testing CodelabはEspressoなどのテストツールの使い方を学べるサンプルです。

全篇Englishですが、大体雰囲気でわかるレベルだと思います。

このレッスンをやれば、アプリ開発におけるテストツールの使い方、

  • JUnitを使ったユニットテスト(Andoridの端末を必要としないテスト)
  • Espressoを使ったUIテスト(実機orエミュレータを必要とするテスト)

が学べます。

ちょっとお得だなと思ったのが、アプリがMVPパターンで作られていることです。テストツールの使い方の勉強のついでに、MVPパターンも学べるなんて一石二鳥だな、なんて思ったのでちょっとやってみました。

思っていたよりもざっくりとした解説なので、雰囲気をつかめるものくらいに考えるといいと思います。

それでもテストのやり方よく分かっていない私からすると、学びの多いレッスンでした。

パッケージを機能で分けるやり方もある

このサンプルではパッケージをレイヤーごとではなく機能ごとに分けてありました。(機能ごとというよりはActivityごとに近い分け方だと思いましたが)

私はこれまでずっと、ModelはModelパッケージに、というレイヤーごとにパッケージを分けていましたが、「機能ごとに分けた方が見やすくていいだろ」と書かれていて目からうろこでした。

ProductFlavorを使ったクラスの切り替え

テストのためにモック用のクラスに差し替えるやり方の解説があります。

XMLのリソースファイル(strings.xmlなど)は異なるFlavorで同一のリソース名が存在した場合、Flavorのものが優先されmainで定義したリソースは上書きされます。

一方でJavaのクラスだと挙動が異なり、同一名のクラスが存在するとエラーになります。そのため、全てのFlavor共通で利用するクラスだけをmainに配置し、切り替えが必要なクラスはFlavorのディレクトリに配置するという工夫が必要になります。

モックを利用したJUnitのテスト

Mockitoを使ったJUnit4のテストのやり方が勉強になりました。これは単純に私がMockitoの使い方がよく分かっていなかったからですが。

@Mockアノテーションに寄る初期化とか、ArgumentCaptorの使い方とか。

EspressoによるUIテスト

Espresso-IntentsによるIntentのモック方法、Espresso-Contribを使ったナビゲーションドロワーのUIテストなどが紹介されています。

Espressoテストの章になると、一部修正が必要な部分がありましたが、それもまた勉強になりました。(EditTextへ文字入力をエミュレートした後は、croseKeyboard()しないとエラーになるとか、上へボタンを参照する部分が英語以外の環境だとエラーになるとか)

jarファイルで配布されているライブラリをAndroid Studioで取り込む

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

Android StudioはビルドツールにGradleを使っているので、ライブラリはbuild.gradleのdependenciesに書くことで簡単に取り込むことが出来ます。

しかし、ライブラリによってはjarファイルで配布されているものもあります。(この例ではNiftyのMobile backend)

jarで配布されるライブラリを組み込む手順は簡単です。app/libsディレクトリにjarファイルを置くだけで完了です。

これはapp/build.gradleにて、libsディレクトリにあるjarファイルをビルド時にコンパイルするよう指定されているからです(compile fileTreeの部分)。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.+'
    compile 'com.android.support:design:23.+'
}

libsディレクトリなんかない、という場合、プロジェクトビューがAndroidになっている可能性が考えられます(デフォルトではAndroidになっています)。この場合、Projectに表示を切り替えることでディレクトリ階層が表示されるようになるはずです。

それでも見つからなければappディレクトリの下にlibsディレクトリを作成し、app/build.gradleにcompile fileTree(dir: 'libs', include: ['*.jar'])を追加すれば組み込めると思います。

ライブラリの取り込み