Androidアプリ テストの設定と実装方法

インストラメンテッドユニットテスト(Instrumented Unit Test)の準備
続けてインストラメンテッドユニットテストの準備方法を説明していきます。まずは必要なライブラリを導入します。ライブラリのインストールには、gradleを使います。
android { defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } } dependencies { // Dependencies for android tests which reside in the "androidTest" src folder. androidTestCompile 'junit:junit:4.12' androidTestCompile 'com.android.support.test:runner:0.4' // Set this dependency to use JUnit 4 rules androidTestCompile 'com.android.support.test:rules:0.4' // Set this dependency to build and run Espresso tests androidTestCompile 'org.hamcrest:hamcrest-core:1.3' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1' androidTestCompile 'com.android.support:support-annotations:23.2.0' }
インストラメンテッドユニットテストの設定はandroidTestCompileを指定します。
androidTestCompileに指定したライブラリは、app/src/androidTest/配下に配置したテストコードで利用できます。

インストラメンテッドユニットテスト(Instrumented Unit Test)の実装
インストラメンテッドユニットテスト(Instrumented Unit Test)はAndroidJUnit4で実装します。Javaの汎用的なテストライブラリであるmockitoやhamcrestも利用できます。
espressoというUIのライブラリを使うとUIのテストもできます。以下のように実装します。
package com.sample.app.model; import android.content.ContentValues; import android.content.Context; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; import android.test.RenamingDelegatingContext; import android.test.suitebuilder.annotation.SmallTest; import com.sample.app.util.TimeUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) @SmallTest public class SampleHelperTest { private Context mContext; @Before public void setUp() { mContext = new RenamingDelegatingContext(InstrumentationRegistry.getInstrumentation().getTargetContext(), "test_"); } @Test public void insert() { ContentValues contentValues = new ContentValues(); contentValues.put(Sample.COL[1], "sample data"); contentValues.put(Sample.COL[2], TimeUtils.getCurrentDate()); contentValues.put(Sample.COL[3], TimeUtils.getCurrentDate()); long result = SampleHelper.insert(mContext, contentValues); assertEquals(result, 1); } }
@Testはアノテーションです。Junit4は、アノテーション@Testをメソッドに付加すると、メソッドをテストメソッドとして認識し、テストが実行されます。
試しに上記のテストを実行してみましょう。
ターミナルでgradleコマンドを使ってtestを実行します。
// project_folderに移動 cd {project_folder} // インストラメンテッドユニットテスト実行 ./gradlew cAT // something :app:connectedAndroidTest BUILD SUCCESSFUL Total time: 23.211 secs
正常終了のメッセージ「BUILD SUCCESSFUL」が表示されたら、テスト結果の出力されたhtmlレポートを確認しましょう。デフォルトの出力箇所は、
{project_folder}/app/build/reports/androidTests/connected/index.html
です。

テストの結果がhtmlレポートで確認できました。
結論
androidのテストは独特です。しかし、以前と比較すると随分と実装しやすくなりました。
androidの進化は早く、アプリを素早くアップデートし続けるには、テストの実装は欠かせまん。
テスト環境もどんどん進化していくので、情報をキャッチアップをしながら、より良いアプリ開発に役立ててください。