Espresso UIテスト入門
5397 ワード
定義#テイギ#
Android JunitRunnerで実行されるinstrumentation-based APIベースのUIテストフレームワーク.
特長
From https://codelabs.developers.google.com/codelabs/android-testing/index.html?index=..%2F..%2Findex#9
From https://www.google.com/search?q=%E7%BF%BB%E8%AF%91&oq=%E7%BF%BB%E8%AF%91&aqs=chrome..69i57j69i61l3j0l2.1255j0j7&sourceid=chrome&ie=UTF-8
要約
OnView() => Click()==>Check(): 1.onView、Ondataでviewを見つけました.2.ViewAction.click()などは、UIインタラクションのセットを実行します.3.UIインタラクションの実行が完了するのを待ち、ViewAssertionsを使用して所望の状態または動作を断言する.次のコードクリップのように:
onView(withId(R.id.my_view)) // withId(R.id.my_view) is a ViewMatcher
.perform(click()) // click() is a ViewAction
.check(matches(isDisplayed())); // matches(isDisplayed()) is a ViewAssertion
ビューを見つけた
Calling methods in the ViewMatchers class. For example, to find a view by looking for a text string it displays, you can call a method like this:
onView(withText("Sign-in"));
Similarly you can call withId() and providing the resource ID (R.id) of the view, as shown in the following example:
onView(withId(R.id.button_signin));
Android resource IDs are not guaranteed to be unique. If your test attempts to match to a resource ID used by more than one view, Espresso throws an AmbiguousViewMatcherException.
From https://developer.android.com/training/testing/ui-testing/espresso-testing.html#build
より正確にviewを見つけます.
onView(allOf(withId(R.id.button_signin), withText("Sign-in")));
From https://developer.android.com/training/testing/ui-testing/espresso-testing.html#build
に注意
AdapterViewタイプのview GroupのいずれかのサブViewであれば、(ListView、GridView)onData()を使用する必要があります.
インタラクティブな操作の実行
UIインタラクションを実行するためのAPIは、次のように、ViewActionsにカプセル化されています.
• ViewActions.click(): Clicks on the view.
• ViewActions.typeText(): Clicks on a view and enters a specified string.
• ViewActions.scrollTo(): Scrolls to the view. The target view must be subclassed from ScrollView and the value of its android:visibilityproperty must be VISIBLE. For views that extend AdapterView (for example, ListView), the onData() method takes care of scrolling for you.
• ViewActions.pressKey(): Performs a key press using a specified keycode.
• ViewActions.clearText(): Clears the text in the target view.
From https://developer.android.com/training/testing/ui-testing/espresso-testing.html#build
検証結果
ViewInteraction、DataInteractionは、UIの状態が所望に合致するかどうかを検証するためにcheck()を提供します.Check()はパラメータを受け入れます.
// Check that the text was changed.
onView(withId(R.id.textToBeChanged))
.check(matches(withText(STRING_TO_BE_TYPED)));
From https://developer.android.com/training/testing/ui-testing/espresso-testing.html#build
Idling resources
Espressoの重要な利点は、UIがアイドル状態になるのを自動的に待つことで、次の操作を開始することです.たとえば、Espressoは、AsyncTaskバックグラウンド操作の実行が完了するのを自動的に待ってから、次の操作を開始します.自分でwait()やsleep()を実行する必要はありません.
ただし、スレッドを自分で管理して後者の他のバックグラウンドサービスをスケジューリングする場合、同期できない場合もあります.ただし、EspressoはIdling resourcesを提供して同期を処理します.
From https://codelabs.developers.google.com/codelabs/android-testing/index.html?index=..%2F..%2Findex#9Espressoに組み込まれた実装クラスCountingIdlingResourceをTestに使用するには、@Before関数にregisterIdlingResourceを登録する必要があります.increment()decrement()を呼び出してアクセスできるカウンタが含まれています.
// The network request might be handled in a different thread so make sure Espresso knows
// that the app is busy until the response is handled.
EspressoIdlingResource.increment(); // App is busy until further notice
mNotesRepository.getNotes(new NotesRepository.LoadNotesCallback() {
@Override
public void onNotesLoaded(List notes) {
EspressoIdlingResource.decrement(); // Set app as idle.
mNotesView.setProgressIndicator(false);
if (notes.isEmpty()) {
mNotesView.showNotesEmptyPlaceholder();
} else {
mNotesView.showNotes(notes);
}
}
});
時間のかかる操作を実行すると、呼び出すことができます.
EspressoIdlingResource.increment()//UI
時間がかかる操作が完了すると、コールバック関数が呼び出されます.
EspressoIdlingResource.decrement(); // Espresso UI ,
このとき、次の操作を続行できます.