このセクションでは、android-espressoの概要と、なぜ開発者がそれを使いたいのかを概説します。
また、アンドロイドエスプレッソの大きなテーマについても触れ、関連するトピックにリンクしてください。 android-espressoのドキュメントは新しくなっているので、それらの関連トピックの初期バージョンを作成する必要があります。
テスト環境の設定
フレークさを避けるため、テストに使用する仮想デバイスまたは物理デバイスのシステムアニメーションをオフにすることを強くお勧めします。
お使いの端末の[設定] - > [開発者オプション]で、次の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つの要素があります。
ViewMatchers - 現在のビュー階層でビューを見つけることを許可する
ViewActions - ビューに対してアクションを実行できます
ViewAssertions - ビューの状態をアサートできます
ベースエスプレッソテスト
onView(ViewMatcher) -- 1
.perform(ViewAction) -- 2
.check(ViewAssertion); -- 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()));
}
}
onView(withId(R.id.pay))
onView(withText("Pay"))
onView(withText(R.string.pay))
こんにちは世界の例を作成するためのチュートリアルです:この例では、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つのことが行われます。
上部の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