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

2016年03月29日(編集2016年05月08日)
このエントリーをはてなブックマークに追加

インストラメンテッドユニットテスト(Instrumented Unit Test)の準備

続けてインストラメンテッドユニットテストの準備方法を説明していきます。まずは必要なライブラリを導入します。ライブラリのインストールには、gradleを使います。

{project_folder}/app/build.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のテストもできます。以下のように実装します。

{project_folder}/app/src/androidTest/java/com/sample/app/model/SampleHelperTest.java
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}
// 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の進化は早く、アプリを素早くアップデートし続けるには、テストの実装は欠かせまん。

テスト環境もどんどん進化していくので、情報をキャッチアップをしながら、より良いアプリ開発に役立ててください。

関連記事

タグ検索で調べてみよう

Android6.0 Test