Espresso-testing-view-matchers

提供:Dev Guides
移動先:案内検索

エスプレッソテストフレームワーク-ビューマッチャー

Espressoフレームワークは、多くのビューマッチャーを提供します。 マッチャーの目的は、ID、テキスト、子ビューの可用性など、ビューのさまざまな属性を使用してビューを一致させることです。 各マッチャーは、ビューの特定の属性と一致し、特定のタイプのビューに適用されます。 たとえば、_withId_マッチャーはビューの_Id_プロパティと一致し、すべてのビューに適用されますが、withTextマッチャーはビューの_Text_プロパティと一致し、_TextView_のみに適用されます。

この章では、エスプレッソマッチャーが構築されている_Hamcrest_ライブラリと同様に、エスプレッソテストフレームワークによって提供されるさまざまなマッチャーを学びましょう。

ハムクレスト図書館

_Hamcrest_ライブラリは、エスプレッソテストフレームワークの範囲内の重要なライブラリです。 _Hamcrest_は、それ自体マッチャーオブジェクトを記述するためのフレームワークです。 Espressoフレームワークは_Hamcrest_ライブラリを広範に使用し、必要に応じて拡張してシンプルで拡張可能なマッチャーを提供します。

_Hamcrest_は、単純な関数_assertThat_と、オブジェクトをアサートするマッチャーのコレクションを提供します。 _assertThat_には3つの引数があり、以下に示すとおりです-

  • 文字列(テストの説明、オプション)
  • オブジェクト(実際)
  • マッチャー(予想)

リストオブジェクトに期待値があるかどうかをテストする簡単な例を書いてみましょう。

import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.MatcherAssert.assertThat;
@Test
public void list_hasValue() {
   ArrayList<String> list = new ArrayList<String>();
   list.add("John");
   assertThat("Is list has John?", list, hasItem("John"));
}

ここで、_hasItem_はマッチャーを返し、実際のリストがアイテムの1つとして値を指定しているかどうかをチェックします。

_Hamcrest_には多くの組み込みマッチャーがあり、新しいマッチャーを作成するオプションもあります。 エスプレッソテストフレームワークで役立つ重要な組み込みマッチャーのいくつかは次のとおりです-

何でも-常にマッチャー

論理ベースのマッチャー

  • allOf -任意の数のマッチャーを受け入れ、すべてのマッチャーが成功した場合にのみ一致します。
  • anyOf -任意の数のマッチャーを受け入れ、1つのマッチャーが成功した場合に一致します。
  • not -1つのマッチャーを受け入れ、マッチャーが失敗した場合にのみマッチし、その逆も同様です。

テキストベースのマッチャー

  • equalToIgnoringCase -実際の入力が、大文字と小文字を区別せずに予想される文字列と等しいかどうかをテストするために使用
  • equalToIgnoringWhiteSpace -大文字と小文字を無視して、実際の入力が指定された文字列に等しいかどうかをテストするために使用されます。
  • containsString -実際の入力に指定された文字列が含まれているかどうかをテストするために使用されます。
  • endsWith -実際の入力が指定された文字列で始まるかどうかをテストするために使用されます。
  • startsWith -入力が実際に指定された文字列で終了するかどうかをテストするために使用されます。

番号ベースのマッチャー

  • closeTo -実際の入力が予想数に近いかどうかをテストするために使用されます。
  • greaterThan -実際の入力が予想された数よりも大きいかどうかをテストするために使用されます。
  • greaterThanOrEqualTo -実際の入力が予想される数値以上かどうかをテストするために使用されます。
  • lessThan -実際の入力が予想される数より少ないかどうかをテストするために使用されます。
  • lessThanOrEqualTo -実際の入力が予想される数以下かどうかをテストするために使用されます。

オブジェクトベースのマッチャー

  • equalTo -実際の入力が期待されるオブジェクトと等しいかどうかをテストするために使用されます
  • hasToString -実際の入力にtoStringメソッドがあるかどうかをテストするために使用されます。
  • instanceOf -実際の入力が予想されるクラスのインスタンスであるかどうかをテストするために使用されます。
  • isCompatibleType -実際の入力が予想されるタイプと互換性があるかどうかをテストするために使用されます。
  • notNullValue -実際の入力がヌルではないかどうかをテストするために使用されます。
  • sameInstance -実際の入力と予想が同じインスタンスであるかどうかをテストするために使用されます。
  • hasProperty -実際の入力に期待されるプロパティがあるかどうかをテストするために使用

is −シュガーまたは_equalTo_のショートカット

マッチャー

Espressoには、ビューを照合して検索するためのonView()メソッドが用意されています。 ビューマッチャーを受け入れ、ViewInteractionオブジェクトを返し、一致したビューと対話します。 ビューマッチャーの頻繁に使用されるリストは以下に説明されています-

withId()

_withId()_はint型の引数を受け入れ、引数はビューのIDを参照します。 ビューのIDを使用してビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(withId(R.id.testView))

withText()

_withText()_は_string_型の引数を受け入れ、引数はビューのtextプロパティの値を参照します ビューのテキスト値を使用してビューに一致するマッチャーを返します。 _TextView_のみに適用されます。 サンプルコードは次のとおりです。

onView(withText("Hello World!"))

withContentDescription()

_withContentDescription()_は_string_型の引数を受け入れ、引数はビューのコンテンツ説明プロパティの値を参照します ビューの説明を使用してビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(withContentDescription("blah"))

テキスト自体ではなく、テキスト値のリソースIDを渡すこともできます。

onView(withContentDescription(R.id.res_id_blah))

hasContentDescription()

_hasContentDescription()_には引数がありません。 これは、コンテンツの説明があるビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.my_view_id), hasContentDescription()))

withTagKey()

_withTagKey()_は_string_型の引数を受け入れ、引数はビューのタグキーを参照します。 タグキーを使用してビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(withTagKey("blah"))

タグ名自体の代わりに、タグ名のリソースIDを渡すこともできます。

onView(withTagKey(R.id.res_id_blah))

withTagValue()

_withTagValue()_は、Matcher <Object>型の引数を受け入れ、引数はビューのタグ値を参照します。 タグ値を使用してビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(withTagValue(is((Object) "blah")))

ここで、_is_はHamcrestマッチャーです。

withClassName()

_withClassName()_は、Matcher <String>型の引数を受け入れ、引数はビューのクラス名の値を参照します。 クラス名を使用してビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(withClassName(endsWith("EditText")))

ここで、_endsWith_はHamcrestマッチャーであり、Matcher <String>を返します

withHint()

_withHint()_は、Matcher <String>型の引数を受け入れ、引数はビューのヒント値を参照します。 ビューのヒントを使用してビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(withClassName(endsWith("Enter name")))

withInputType()

_withInputType()_は_int_型の引数を受け入れ、引数はビューの入力型を参照します。 入力タイプを使用してビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(withInputType(TYPE_CLASS_DATETIME))

ここで、_TYPE_CLASS_DATETIME_は、日付と時刻をサポートする編集ビューを指します。

withResourceName()

_withResourceName()_は、Matcher <String>型の引数を受け入れ、引数はビューのクラス名の値を参照します。 ビューのリソース名を使用してビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(withResourceName(endsWith("res_name")))

文字列引数も受け入れます。 サンプルコードは次のとおりです。

onView(withResourceName("my_res_name"))

withAlpha()

_withAlpha()_は_float_型の引数を受け入れ、引数はビューのアルファ値を参照します。 ビューのアルファ値を使用してビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(withAlpha(0.8))

withEffectiveVisibility()

_withEffectiveVisibility()_は_ViewMatchers.Visibility_型の引数を受け入れ、引数はビューの有効な可視性を参照します。 ビューの可視性を使用してビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(withEffectiveVisibility(withEffectiveVisibility.INVISIBLE))

withSpinnerText()

_withSpinnerText()_は、Matcher <String>型の引数を受け入れ、引数はスピナーの現在選択されているビューの値を参照します。 選択したアイテムのtoString値に基づいてスピナーと一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(withSpinnerText(endsWith("USA")))

文字列引数または文字列のリソースIDも受け入れます。 サンプルコードは次のとおりです。

onView(withResourceName("USA"))
onView(withResourceName(R.string.res_usa))

withSubstring()

_withSubString()_は、_withText()_と似ていますが、ビューのテキスト値のサブストリングをテストするのに役立つことを除きます。

onView(withSubString("Hello"))

hasLinks()

_hasLinks()_には引数がなく、リンクを持つビューに一致するマッチャーを返します。 TextViewのみに適用されます。 サンプルコードは次のとおりです。

onView(allOf(withSubString("Hello"), hasLinks()))

ここで、_allOf_はHamcrestマッチャーです。 _allOf_はマッチャーを返します。マッチャーは渡されたすべてのマッチャーに一致します。ここでは、ビューのテキスト値にリンクがあるかどうかを確認するのに使用されます。

hasTextColor()

_hasTextColor()_はint型の単一の引数を受け入れ、引数は色のリソースIDを参照します。 色に基づいて_TextView_と一致するマッチャーを返します。 _TextView_のみに適用されます。 サンプルコードは次のとおりです。

onView(allOf(withSubString("Hello"), hasTextColor(R.color.Red)))

hasEllipsizedText()

_hasEllipsizedText()_には引数がありません。 長いテキストと省略形(最初のいずれか)を持つTextViewに一致するマッチャーを返します。 十.. 最後)またはカットオフ(最初…)。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.my_text_view_id), hasEllipsizedText()))

hasMultilineText()

_hasMultilineText()_には引数がありません。 これは、複数行のテキストを持つTextViewに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.my_test_view_id), hasMultilineText()))

hasBackground()

_hasBackground()_は、int型の単一の引数を受け入れ、引数はバックグラウンドリソースのリソースIDを参照します。 バックグラウンドリソースに基づいてビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId("image"), hasBackground(R.drawable.your_drawable)))

hasErrorText()

_hasErrorText()_は、Matcher <String>型の引数を受け入れ、引数はビューの(EditText)エラー文字列値を参照します。 ビューのエラー文字列を使用してビューに一致するマッチャーを返します。 これは_EditText_のみに適用されます。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.editText_name), hasErrorText(is("name is required"))))

文字列引数も受け入れます。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.editText_name), hasErrorText("name is required")))

hasImeAction()

_hasImeAction()_は、Matcher <Integer>型の引数を受け入れ、引数はビューの(EditText)サポートされている入力メソッドを参照します。 ビューのサポートされている入力メソッドを使用してビューに一致するマッチャーを返します。 これは_EditText_のみに適用されます。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.editText_name),
hasImeAction(is(EditorInfo.IME_ACTION_GO))))

ここで、EditorInfo.IME_ACTION_GOはインプットメソッドオプションの1つです。 _hasImeAction()_は整数引数も受け入れます。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.editText_name),
hasImeAction(EditorInfo.IME_ACTION_GO)))

supportsInputMethods()

_supportsInputMethods()_には引数がありません。 入力メソッドをサポートしている場合、ビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.editText_name), supportsInputMethods()))

isRoot()

_isRoot()_には引数がありません。 ルートビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.my_root_id), isRoot()))

表示されています()

_isDisplayed()_には引数がありません。 現在表示されているビューと一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.my_view_id), isDisplayed()))

isDisplayingAtLeast()

_isDisplayingAtLeast()_は、int型の単一の引数を受け入れます。 現在表示されているビューと少なくとも指定された割合で一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.my_view_id), isDisplayingAtLeast(75)))

isCompletelyDisplayed()

_isCompletelyDisplayed()_には引数がありません。 現在完全に画面に表示されているビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.my_view_id), isCompletelyDisplayed()))

有効になっています()

_isEnabled()_には引数がありません。 有効なビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.my_view_id), isEnabled()))

isFocusable()

_isFocusable()_には引数がありません。 フォーカスオプションを持つビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.my_view_id), isFocusable()))

hasFocus()

_hasFocus()_には引数がありません。 現在フォーカスされているビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.my_view_id), hasFocus()))

isClickable()

_isClickable()_には引数がありません。 クリックオプションであるビューと一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.my_view_id), isClickable()))

isSelected()

_isSelected()_には引数がありません。 現在選択されているビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.my_view_id), isSelected()))

isChecked()

_isChecked()_には引数がありません。 それは、CompoundButtonタイプ(またはそのサブタイプ)で、チェック状態のビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.my_view_id), isChecked()))

isNotChecked()

_isNotChecked()_はisCheckedの反対です。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.my_view_id), isNotChecked()))

isJavascriptEnabled()

_isJavascriptEnabled()_には引数がありません。 JavaScriptを評価しているWebViewに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.my_webview_id), isJavascriptEnabled()))

withParent()

_withParent()_は、Matcher <View>型の引数を1つ受け入れます。 引数はビューを参照します。 指定されたビューが親ビューであるビューと一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.childView), withParent(withId(R.id.parentView))))

hasSibling()

_hasSibling()_は、Matcher> View <型の引数を1つ受け入れます。 引数はビューを参照します。 渡されたビューがその兄弟ビューの1つであるビューと一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(hasSibling(withId(R.id.siblingView)))

withChild()

_withChild()_は、Matcher <View>型の引数を1つ受け入れます。 引数はビューを参照します。 渡されたビューが子ビューであるビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.parentView), withChild(withId(R.id.childView))))

hasChildCount()

_hasChildCount()_は、int型の引数を1つ受け入れます。 引数は、ビューの子カウントを参照します。 引数で指定されたのとまったく同じ数の子ビューを持つビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(hasChildCount(4))

hasMinimumChildCount()

_hasMinimumChildCount()_は、int型の引数を1つ受け入れます。 引数は、ビューの子カウントを参照します。 引数で指定された数以上の子ビューを持つビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(hasMinimumChildCount(4))

hasDescendant()

_hasDescendant()_は、Matcher <View>型の引数を1つ受け入れます。 引数はビューを参照します。 渡されたビューがビュー階層の子孫ビューの1つであるビューに一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(hasDescendant(withId(R.id.descendantView)))

isDescendantOfA()

_isDescendantOfA()_は、Matcher <View>型の引数を1つ受け入れます。 引数はビューを参照します。 渡されたビューがビュー階層の祖先ビューの1つであるビューと一致するマッチャーを返します。 サンプルコードは次のとおりです。

onView(allOf(withId(R.id.myView), isDescendantOfA(withId(R.id.parentView))))