Espresso-testing-custom-view-matchers
提供:Dev Guides
カスタムビューマッチャー
Espressoには、独自のカスタムビューマッチャーを作成するためのさまざまなオプションがあり、_Hamcrest_マッチャーに基づいています。 カスタムマッチャーは、フレームワークを拡張し、好みに合わせてフレームワークをカスタマイズするための非常に強力な概念です。 カスタムマッチャーを作成する利点のいくつかは次のとおりです。
- 独自のカスタムビューのユニークな機能を活用するには
- カスタムマッチャーは、_AdapterView_ベースのテストケースでさまざまな種類の基になるデータと照合するのに役立ちます。
- 複数のマッチャーの機能を組み合わせて、現在のマッチャーを簡素化するには
需要が生じたときに新しいマッチャーを作成でき、非常に簡単です。 新しいカスタムマッチャーを作成して、_TextView_のidとテキストの両方をテストするマッチャーを返します。
エスプレッソは、新しいマッチャーを記述するために次の2つのクラスを提供します-
- TypeSafeMatcher
- BoundedMatcher
両方のクラスは性質が似ていますが、_BoundedMatcher_は、正しい型を手動で確認することなく、正しい型へのオブジェクトのキャストを透過的に処理します。 _BoundedMatcher_クラスを使用して、新しいマッチャー_withIdAndText_を作成します。 新しいマッチャーを作成する手順を確認しましょう。
- _app/build.gradle_ファイルに以下の依存関係を追加して同期します。
dependencies {
implementation 'androidx.test.espresso:espresso-core:3.1.1'
}
- マッチャー(メソッド)を含める新しいクラスを作成し、_final_としてマークします
public final class MyMatchers {
}
- 必要な引数を使用して新しいクラス内で静的メソッドを宣言し、Matcher <View>を戻り値の型として設定します。
public final class MyMatchers {
@NonNull
public static Matcher<View> withIdAndText(final Matcher<Integer>
integerMatcher, final Matcher<String> stringMatcher) {
}
}
- 静的メソッド内に以下のシグネチャを持つ新しいBoundedMatcherオブジェクト(戻り値も)を作成します。
public final class MyMatchers {
@NonNull
public static Matcher<View> withIdAndText(final Matcher<Integer>
integerMatcher, final Matcher<String> stringMatcher) {
return new BoundedMatcher<View, TextView>(TextView.class) {
};
}
}
- _BoundedMatcher_オブジェクトの_describeTo_および_matchesSafely_メソッドをオーバーライドします。 describeToには、戻り値のないタイプ_Description_の単一の引数があり、マッチャーに関するエラー情報に使用されます。 _matchesSafely_には戻り値の型_boolean_を持つTextView型の引数が1つあり、ビューの照合に使用されます。
コードの最終バージョンは次のとおりです。
public final class MyMatchers {
@NonNull
public static Matcher<View> withIdAndText(final Matcher<Integer>
integerMatcher, final Matcher<String> stringMatcher) {
return new BoundedMatcher<View, TextView>(TextView.class) {
@Override
public void describeTo(final Description description) {
description.appendText("error text: ");
stringMatcher.describeTo(description);
integerMatcher.describeTo(description);
}
@Override
public boolean matchesSafely(final TextView textView) {
return stringMatcher.matches(textView.getText().toString()) &&
integerMatcher.matches(textView.getId());
}
};
}
}
- 最後に、mewマッチャーを使用して、以下に示すテストケースを記述できます。
@Test
public void view_customMatcher_isCorrect() {
onView(withIdAndText(is((Integer) R.id.textView_hello), is((String) "Hello World!")))
.check(matches(withText("Hello World!")));
}