Android
Espresso
AndroidStudio

Android用のUIテスト自動化フレームワーク<Espresso>の使い方について

More than 1 year has passed since last update.

Espresso

Espresso は Android用のUIテスト自動化フレームワークとなります。
https://google.github.io/android-testing-support-library/docs/espresso/

導入手順

テスト端末環境セットアップ

設定メニューから開発者向けオプションを開き、以下の設定をオフにする
- ウィンドウアニメ
- トランジションアニメ
- Animator再生時間

Espresso のダウンロード

  1. 最新版 Android Support Repository をインストールしておく (see instructions)
  2. アプリケーションの build.gradle を開く
  3. dependencies に以下を追加
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
androidTestCompile 'com.android.support.test:runner:0.5'

Instrumentation Runner セット

  • android.defaultConfig に以下を追加
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

記述例 :

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.1"

    defaultConfig {
        applicationId "[パッケージ名]"
        minSdkVersion 16
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"

        // Instrumentation Runner
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

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

    // コンフリクト回避
    androidTestCompile 'com.android.support:support-annotations:24.1.1'

    // Espresso
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
    androidTestCompile 'com.android.support.test:runner:0.5'
}

※コンフリクト回避用に以下の記載が必要
androidTestCompile 'com.android.support:support-annotations:24.1.1'

テスト実施

テストケース作成

サンプルのテストケースを作成します。
ここでは一例として、MainActivity.java に文字列"Hello World!" がセットされた TextView が正常に表示されているかをチェックするテストケースを作成します。

  1. MainActivity.java に 文字列"Hello World!" をセットした TextView を追加します。
  2. 以下の内容を記述した HelloWorldEspressoTest.java ファイルを src/androidTest/java/[パッケージ名]/ 直下に作成します。
package [パッケージ名];

import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.LargeTest;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withText;

@RunWith(AndroidJUnit4.class)
@LargeTest
public class HelloWorldEspressoTest {
    @Rule
    public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule(MainActivity.class);

    @Test
    public void listGoesOverTheFold() {
        onView(withText("Hello World!")).check(matches(isDisplayed()));
    }
}

テスト実行

先ほど作成したテストクラス上で右クリックを押し、メニューから Run 'HelloWorldEspressoTest' を選択しテスト実行する。
※実行するテスト端末、又はエミュレータが必要となる。

d6a0eb785502eb4c49d5f9fa1f09b2c5.png

テスト結果確認

表示が緑色になっていれば成功、表示が赤色となっている場合は失敗となる。

057c307ddd4ac48038e83bc731d6693e.png

Espresso テストコード記述例

テストは、以下のような形で 検索→アクション実行→チェック を行います。

onView(ViewMatcher) // View の検索
 .perform(ViewAction) // アクション実行
 .check(ViewAssertion); // チェック

検索

ViewMatcher に条件を指定して検索を行います。

例)

  • リソースIDからViewを探す
onView(withId(R.id.my_view))
  • テキストプロパティ値からTextViewを探す
onView(withText("Hello World!"))

アクション実行

ViewAction にアクションを指定します。

例)

  • View へ文字列を入力後、ソフトキーボードを閉じる
onView(withId(R.id.my_view)).perform(typeText("こんにちは"), closeSoftKeyboard());
  • View をクリックする
onView(withId(R.id.my_view)).perform(click());

チェック

ViewAssertion に条件を指定してチェックを行います。
(matches の引数は ViewMatcher、戻り値は ViewAssertion)

例)

  • ユーザーのスクリーンに現在表示されているかをチェック
onView(withId(R.id.my_view)).check(matches(isDisplayed()));
  • ユーザーのスクリーンに現在表示されていない事をチェック
onView(withId(R.id.my_view)).check(matches(not(isDisplayed())));

  • TextView のテキストプロパティ値をチェック
onView(withId(R.id.my_view)).check(matches(withText("チェックする文字列"));
  • View が見つからない事をチェック
onView(withId(R.id.my_view)).check(doesNotExist());
  • View が画面内に全て表示されているかをチェック
onView(withId(R.id.my_view)).check(matches(isCompletelyDisplayed()));

サンプル

実際のサンプルテストコードについては、テストバリエーションに応じて
Googleのサンプルプロジェクトが GitHub に登録されているので参考にして下さい。

サンプル名 内容
BasicSample Basic Espresso sample
CustomMatcherSample Shows how to extend Espresso to match the hint property of an EditText
DataAdapterSample Showcases the onData() entry point for Espresso, for lists and AdapterViews
IntentsBasicSample Basic usage of intended() and intending()
IntentsAdvancedSample Simulates a user fetching a bitmap using the camera
MultiWindowSample Shows how to point Espresso to different windows
WebBasicSample Use Espresso-web to interact with WebViews.
BasicSampleBundled Basic sample for Eclipse and other IDEs

Link

Espresso ドキュメント
https://google.github.io/android-testing-support-library/docs/espresso/index.html
Espresso cheat sheet
https://google.github.io/android-testing-support-library/docs/espresso/cheatsheet/index.html