Espresso-testing-architecture
エスプレッソテストフレームワーク-アーキテクチャ
この章では、エスプレッソテストフレームワークの用語、簡単なエスプレッソテストケースの作成方法、およびエスプレッソテストフレームワークの完全なワークフローまたはアーキテクチャについて学習します。
概要
Espressoは、Androidアプリケーションのユーザーインターフェイスとユーザーインタラクションをテストするための多数のクラスを提供します。 以下に指定されているように、それらは5つのカテゴリにグループ化することができます-
JUnitランナー
Androidテストフレームワークは、JUnit3およびJUnit4スタイルのテストケースで記述されたエスプレッソテストケースを実行するランナーAndroidJUnitRunnerを提供します。 これは、Androidアプリケーションに固有であり、実際のデバイスまたはエミュレーターの両方で、エスプレッソテストケースとテスト対象アプリケーションのロードを透過的に処理し、テストケースを実行し、テストケースの結果を報告します。 テストケースでAndroidJUnitRunnerを使用するには、@ RunWithアノテーションを使用してテストクラスに注釈を付け、次に指定されたとおりにAndroidJUnitRunner引数を渡す必要があります-
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
}
JUnitルール
Androidテストフレームワークは、テストケースを実行する前にAndroidアクティビティを起動するActivityTestRuleルールを提供します。 @ Test`および@Beforeアノテーションが付けられた各メソッドの前にアクティビティを起動します。 @Afterアノテーションが付けられたメソッドの後、アクティビティを終了します。 サンプルコードは次のとおりです。
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
ここで、_MainActivity_は、テストケースの実行前に起動され、特定のテストケースの実行後に破棄されるアクティビティです。
ViewMatchers
Espressoは、Androidアクティビティ画面のビュー階層内のUI要素/ビューを照合および検索するために、多数のビューマッチャークラス(androidx.test.espresso.matcher.ViewMatchers package)を提供します。 EspressoのメソッドonViewは、タイプ_Matcher_(ビューマッチャー)の単一の引数を取り、対応するUIビューを見つけて、対応する_ViewInteraction_オブジェクトを返します。 _onView_メソッドによって返される_ViewInteraction_オブジェクトを使用して、一致したビューのクリックなどのアクションを呼び出したり、一致したビューをアサートしたりできます。 「Hello World!」というテキストを含むビューを見つけるためのサンプルコードは次のとおりです。
ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));
ここで、_withText_はマッチャーであり、「Hello World!」というテキストを持つUIビューと一致させるために使用できます。
ViewActions
Espressoは、選択された/一致したビューで異なるアクションを呼び出すために、(androidx.test.espresso.action.ViewActionsで)多数のビューアクションクラスを提供します。 _onView_が_ViewInteraction_オブジェクトと一致して返されると、_ViewInteraction_オブジェクトの「perform」メソッドを呼び出して適切なビューアクションでそれを渡すことで、任意のアクションを呼び出すことができます。 一致したビューをクリックするサンプルコードは次のとおりです。
ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));
viewInteraction.perform(click());
ここで、一致したビューのクリックアクションが呼び出されます。
ViewAssertions
ビューマッチャーやビューアクションと同様に、Espressoは(_androidx.test.espresso.assertion.ViewAssertions_パッケージで)多数のビューアサーションを提供して、一致したビューが予想どおりであることをアサートします。 onViewが_ViewInteraction_オブジェクトに一致して返されると、_ViewInteraction_のcheckメソッドを使用して適切なビューアサーションで渡すことで、すべてのアサートをチェックできます。 一致したビューが次のとおりであることをアサートするサンプルコード、
ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));
viewInteraction.check(matches(withId(R.id.text_view)));
ここで、_matches_はビューマッチャーを受け入れ、ビューアサーションを返します。これは、_ViewInteraction_のcheckメソッドで確認できます。
エスプレッソテストフレームワークのワークフロー
エスプレッソテストフレームワークがどのように機能し、どのようにシンプルで柔軟な方法であらゆる種類のユーザーインタラクションを行うオプションを提供するかを理解しましょう。 エスプレッソテストケースのワークフローは次のとおりです。
- 前に学んだように、Android JUnitランナー_AndroidJUnit4_はAndroidテストケースを実行します。 エスプレッソテストケースは、_ @ RunWith(AndroidJUnut.class)_でマークする必要があります。 最初に、_AndroidJUnit4_はテストケースを実行する環境を準備します。 接続されているAndroidデバイスまたはエミュレーターを起動し、アプリケーションをインストールして、テスト対象のアプリケーションが準備完了状態であることを確認します。 テストケースを実行し、結果を報告します。
- Espressoでは、アクティビティを指定するために、少なくとも_ActivityTestRule_タイプの_JUnit_ルールが1つ必要です。 Android JUnitランナーは、_ActivityTestRule_を使用して起動するアクティビティを開始します。
- すべてのテストケースでは、目的のビューに一致して検索するために、少なくとも1つの_onView_または_onDate_(_AdapterView_などのデータベースビューの検索に使用)メソッド呼び出しが必要です。 onViewまたはonDataは_ViewInteraction_オブジェクトを返します。
- _ViewInteraction_オブジェクトが返されたら、選択したビューのアクションを呼び出すか、アサーションを使用して予想されるビューのビューを確認します。
- アクションは、_ViewInteraction_オブジェクトのperformメソッドを使用して、使用可能なビューアクションのいずれかを渡すことで呼び出すことができます。
- アサーションは、使用可能なビューアサーションのいずれかを渡すことにより、_ViewInteraction_オブジェクトのcheckメソッドを使用して呼び出すことができます。
_Workflow_のダイアグラム表現は次のとおりです。
例–アサーションの表示
「HelloWorldApp」アプリケーションで「Hello World!」というテキストを持つテキストビューを見つける簡単なテストケースを作成し、ビューアサーションを使用してアサートします。 完全なコードは次のとおりです。
package com.finddevguides.espressosamples.helloworldapp;
import android.content.Context;
import androidx.test.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.matcher.ViewMatchers.withText;;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static org.junit.Assert.*;
/**
*Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void view_isCorrect() {
onView(withText("Hello World!")).check(matches(isDisplayed()));
}
@Test
public void useAppContext() {
//Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.finddevguides.espressosamples.helloworldapp", appContext.getPackageName());
}
}
ここでは、_withText_ビューマッチャーを使用して、「Hello World!」テキストを含むテキストビューを検索し、ビューアサーションに一致して、テキストビューが適切に表示されることをアサートしました。 Android Studioでテストケースが呼び出されると、テストケースが実行され、以下のように成功メッセージが報告されます。