#はじめに
最近Androidのテストを書くことになりそうなのでテストに慣れるためにもサンプルを実行しながら学習をすすめることにしました。
その備忘録になります。
#InstrumentationTest(インストルメンテーションテスト)ってなに
「実機やエミュレータで実際に動かす」テストという意味ととると良さそうです。
Android会の議論を読むと参考になりました。
Instrumentation単語を調べてみたところ「計装と測定」が一番それらしい意味。
#Googleのサンプルを動かしてみる
Google公式のサンプルがあるのでそれをまずは動かしてみます。
##サンプルの概要
アプリ部分とテスト部分に分かれてます。
- アプリの概要
- スピナーで選択した値を保存して、Activityが再起動しても前回選択された位置設定するアプリ
- テストの概要
- アプリを起動してスピナーに値を設定、再起動して先ほどの値がスピナーに保存されいるか確認を2回繰り返す、間違っていればエラー
##Sampleを開く
サンプルを早速起動してみます。
- AndroidStudioからInport an Android code sampleを選択
3 Nameを適当に変えて、ModuleをApplicationに選択→ok
##コンソールからテスト実行
コンソールからもプロジェクトの直下で以下のコマンドを入力することでテスト実行できます。
./gradlew connectedAndroidTest
#テストコードを見てみる
・ ActivityInstrumentationTestCase2
クラスを継承
・ Activity activity = getActivity();
でMainActivityの起動作成
・ Activityからspinnerを取得しUIスレッドでフォーカスをあてて、選択状態を設定する。
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
spinner1.requestFocus();
spinner1.setSelection(TEST_SPINNER_POSITION_1);
}
});
・activity.finish(); setActivity(null);
でActivityの終了
・assertEquals()
で取得した値と想定した値が同じか判定 ※assertEqualsはJunitのメソッドです。
#テストを失敗するようにしてみる
SampleTestsクラスの94行目
assertEquals(TEST_SPINNER_POSITION_1, currentPosition);
を
assertEquals(MainActivity.WEATHER_RAIN, currentPosition);
等に変えて実行し
junit.framework.AssertionFailedError
がでることを確認
以上です。