Looking for android-espresso Answers? Try Ask4KnowledgeBase
Looking for android-espresso Keywords? Try Ask4Keywords

android-espressoandroid-espressoを使い始める


備考

このセクションでは、android-espressoの概要と、なぜ開発者がそれを使いたいのかを概説します。

また、アンドロイドエスプレッソの大きなテーマについても触れ、関連するトピックにリンクしてください。 android-espressoのドキュメントは新しくなっているので、それらの関連トピックの初期バージョンを作成する必要があります。

エスプレッソの設定手順

  • テスト環境の設定
  • エスプレッソをダウンロード
  • 計測ランナーを設定する
  • build.gradleファイルの例
  • アナリティクス
  • 最初のテストを追加する
  • テストの実行このガイドでは、SDKマネージャを使用してEspressoをインストールし、Gradleを使用してエスプレッソを構築します。 Android Studioをお勧めします。

テスト環境の設定

フレークさを避けるため、テストに使用する仮想デバイスまたは物理デバイスのシステムアニメーションをオフにすることを強くお勧めします。

お使いの端末の[設定] - > [開発者オプション]で、次の3つの設定を無効にします。

  • ウィンドウアニメーションスケール
  • トランジションアニメーションスケール
  • アニメータのデュレーションスケール

エスプレッソをダウンロード

  • Extrasの下に最新のAndroidサポートリポジトリがインストールされていることを確認してください(手順を参照)。

  • アプリのbuild.gradleファイルを開きます。これは通常、トップレベルのbuild.gradleファイルではなく、app / build.gradleです。

  • 依存関係の中に次の行を追加します。

    androidTestCompile 'com.android.support.test.espresso:エスプレッソコア:2.2.2' androidTestCompile 'com.android.support.test:runner:0.5'

  • その他の成果物についてはダウンロードセクションを参照してください(エスプレッソ、エスプレッソ、ウェブなど)

  • 計測ランナーを設定する

同じbuild.gradleファイルにandroid.defaultConfigの次の行を追加します。testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" build.gradleファイルの例

apply plugin: 'com.android.application'

    android {
        compileSdkVersion 22
        buildToolsVersion "22"
    
        defaultConfig {
            applicationId "com.my.awesome.app"
            minSdkVersion 10
            targetSdkVersion 22.0.1
            versionCode 1
            versionName "1.0"
    
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
    }

dependencies {
    // App's dependencies, including test
    compile 'com.android.support:support-annotations:22.2.0'

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

アナリティクス

新しいリリースが登場するたびに適切な軌道に乗っていることを確認するため、テストランナーは分析を収集します。具体的には、各呼び出しごとに、テスト対象のアプリケーションのパッケージ名のハッシュをアップロードします。これにより、Espressoを使用したユニークなパッケージ数と使用量の両方を測定することができます。

このデータをアップロードしない場合は、次の引数をテストランナーに渡して無効にすることができます:disableAnalytics "true"(カスタム引数を渡す方法を参照)。

最初のテストを追加する

Android Studioはデフォルトでsrc / androidTest / java / com.example.package /にテストを作成します。

ルールを使用したJUnit4テストの例:

@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()));
    }
}
 

テストの実行

Android Studioの場合

テスト構成を作成する

Androidスタジオで:

  • 実行メニューを開く - >構成の編集

  • 新しいAndroidテスト設定を追加する

  • モジュールを選択する

  • 特定の計測ランナーを追加する:

    android.support.test.runner.AndroidJUnitRunner

新しく作成した構成を実行します。

コマンドラインからGradle経由

実行する

./gradlew connectedAndroidTest
 

エスプレッソには基本的に3つの要素があります。

  1. ViewMatchers - 現在のビュー階層でビューを見つけることを許可する

  2. ViewActions - ビューに対してアクションを実行できます

  3. ViewAssertions - ビューの状態をアサートできます

ベースエスプレッソテスト

onView(ViewMatcher)       -- 1     
 .perform(ViewAction)     -- 2
   .check(ViewAssertion); -- 3
 
  1. ビューを見つける
  2. ビューに対してアクションを実行します。
  3. アサーションを検証する

オプションメニュー項目の確認(スクリーンショットを撮るためにスプーンを使用)

/**
 * @author piotrek1543
 *
 * This example provides a specific UI testing problem and how it is already solved 
 * with Google's Espresso. Notice that I used also Spoon framework, as Espresso 
 * lacks of taking screenshots functionality.
 */

@RunWith(AndroidJUnit4.class)
public class MainActivityAndroidTest {
    @Rule
    public ActivityTestRule<MainActivity> mRule = new ActivityTestRule<>(MainActivity.class);

    @Test
    public void checkIfSettingsMenuItemsAreVisible() throws InterruptedException {
        //open OptionsMenu to see available items
        openActionBarOverflowOrOptionsMenu(mRule.getActivity());
        //create a screenshot with 'options_menu' TAG
        Spoon.screenshot(mRule.getActivity(), "options_menu");
        //check if Settings item is Visible
        onView(withText(R.string.action_settings)).check(matches(isDisplayed()));
        //check if `Sort` item is Visible
        onView(withText(R.string.action_sort)).check(matches(isDisplayed()));
        //perform click on `Sort` OptionsMenu item
        onView(withText(R.string.action_sort)).perform(click());
        //create a screenshot with 'options_menu_sort' TAG
        Spoon.screenshot(mRule.getActivity(), "options_menu_sort");
        //check if `Sort -> By Value id` item is Visible
        onView(withText(R.string.menu_sort_length)).check(matches(isDisplayed()));
        //check if `Sort -> By Joke length` item is Visible
        onView(withText(R.string.menu_sort_a_z)).check(matches(isDisplayed()));
    }
}
 

IDによるビューを探す

onView(withId(R.id.pay))
 

テキストによるビューの検索

onView(withText("Pay"))
onView(withText(R.string.pay))
 

Hello Worldエスプレッソの例

こんにちは世界の例を作成するためのチュートリアルです:この例では、Android Studio 2.3;

Android Studioを使用して、空のアクティビティを持つ新しいプロジェクトを作成します。次に、私たちがテストできる簡単な機能をAppに追加します:クリックするとテキストビューに "Hello World"と表示されるボタンを追加します。

アクティビティコードは次のようになります。

package com.example.testing.helloworld;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final TextView textView = (TextView) findViewById(R.id.textView);

        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textView.setText("Hello World!");
            }
        });
    }
}
 

このアクティビティのactivity_main レイアウトは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Say Hello" />
</LinearLayout>
 

今度は、エスプレッソを使って、この新しい作成されたアプリの動作をテストしたいと考えています。一般的にあなたのアプリケーションのコードはmain パッケージ内にあり、ユニットテストは内部test あり、エスプレッソインストルメンテーションテストはandroidTest パッケージ内にandroidTest ます。 Android Studioで新しい空のアクティビティプロジェクトを作成する場合は、既にそれらのパッケージとクラスが作成されているはずです。

ここに画像の説明を入力

エスプレッソで始めるには、 espresso-core 依存関係がbuild.gradle ファイルに含まれていることを確認する必要があります( compile キーワードではなく、 androidTestCompile 注釈されていcompile )。 Androidスタジオで作成されたbuild.gradle ファイルの依存関係は、次のようになります。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.2.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}
 

すべての設定がExampleInstrumentationTest したら、実際のテストから開始できますExampleInstrumentationTest ファイルを開き、内部にuseAppContext テストが1つ生成されていることがExampleInstrumentationTest ます。このテストクラスを変更し、アプリの動作を確認するためのテストを作成します:

@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(
        MainActivity.class, false, true);

    @Test
    public void checkHelloWorld() throws Exception {
        onView(withId(R.id.textView)).check(matches(withText("")));
        onView(withId(R.id.button)).perform(click());
        onView(withId(R.id.textView)).check(matches(withText("Hello World!")));
    }
}
 

ExampleInstrumentedTest クラスを実行して、テストを開始します。このテストでは、次の3つのことが行われます。

  1. textviewに空の文字列( "")が含まれているかどうかを確認します。
  2. 私たちのレイアウトのボタンをクリックします
  3. "Hello World!"が含まれている場合、テキストビューのテキストを再度チェックします。

上部のActivityTestRuleは、どのアクティビティがテストされているかを定義し、テストの開始時にそれを起動します。 (アクティビティの自動起動を切り替えて、手動で各テストの中で起動することもできます)

テストルールは非常に単純です:

  • onView(withId(R.id.textView)) は、 activity_main レイアウトファイル内のビューのIDによって現在の画面内のビューを検索します。
  • .check(matches(withText(""))); そのビューに対してテストケースを実行します。
  • .perform(click()) はビューに対してアクションを実行します:このアクションは、クリック、長いクリック、スワイプなどです。

これはアンドロイドエスプレッソで始まるチュートリアルです。計器テスト、私はあなたにいくつかの洞察を与えてくれたことを願っています!

テストを表示する

onView(withId(R.id.greet_button)) // withId(R.id.my_view) is a ViewMatcher
.perform(click())                 // click() is a ViewAction
.check(matches(not(isEnabled())); // matches(isEnabled()) is a ViewAssertion