Espresso предоставляет различные варианты для создания наших собственных сопоставителей представлений, и он основан на сопоставителях Hamcrest. Custom matcher — очень мощная концепция для расширения фреймворка, а также для настройки фреймворка на наш вкус. Некоторые из преимуществ написания пользовательских соответствий следующие:
-
Чтобы использовать уникальную особенность наших собственных пользовательских представлений
-
Настраиваемое сопоставление помогает в тестовых примерах на основе AdapterView соответствовать разным типам базовых данных.
-
Чтобы упростить текущие сопоставления путем объединения функций нескольких сопоставителей
Чтобы использовать уникальную особенность наших собственных пользовательских представлений
Настраиваемое сопоставление помогает в тестовых примерах на основе AdapterView соответствовать разным типам базовых данных.
Чтобы упростить текущие сопоставления путем объединения функций нескольких сопоставителей
Мы можем создать новый механизм сопоставления, когда и когда возникнет спрос, и это довольно просто. Давайте создадим новый пользовательский сопоставитель, который возвращает сопоставитель для проверки как идентификатора, так и текста TextView .
Эспрессо предоставляет следующие два класса для написания новых соответствий —
-
TypeSafeMatcher
-
BoundedMatcher
TypeSafeMatcher
BoundedMatcher
Оба класса схожи по природе, за исключением того, что BoundedMatcher прозрачно обрабатывает приведение объекта к правильному типу без ручной проверки на правильный тип. Мы создадим новый механизм сопоставления withIdAndText с использованием класса BoundedMatcher . Давайте проверим шаги, чтобы написать новые соответствия.
-
Добавьте приведенную ниже зависимость в файл app / build.gradle и синхронизируйте ее.
Добавьте приведенную ниже зависимость в файл app / build.gradle и синхронизируйте ее.
dependencies { implementation 'androidx.test.espresso:espresso-core:3.1.1' }
-
Создайте новый класс, чтобы включить наши соответствия (методы) и пометить его как окончательный
Создайте новый класс, чтобы включить наши соответствия (методы) и пометить его как окончательный
public final class MyMatchers { }
-
Объявите статический метод внутри нового класса с необходимыми аргументами и установите Matcher <View> в качестве возвращаемого типа.
Объявите статический метод внутри нового класса с необходимыми аргументами и установите Matcher <View> в качестве возвращаемого типа.
public final class MyMatchers { @NonNull public static Matcher<View> withIdAndText(final Matcher<Integer> integerMatcher, final Matcher<String> stringMatcher) { } }
-
Создайте новый объект BoundedMatcher (также возвращаемое значение) с подписью ниже внутри статического метода,
Создайте новый объект 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) { }; } }
-
Переопределите методы descriptionTo и matchSafely в объекте BoundedMatcher . descriptionTo имеет единственный аргумент типа Description без возвращаемого типа и используется для получения информации об ошибках, связанных с сопоставителями. matchSafely имеет единственный аргумент типа TextView с возвращаемым типом boolean, и он используется для соответствия представлению.
Переопределите методы descriptionTo и matchSafely в объекте BoundedMatcher . descriptionTo имеет единственный аргумент типа Description без возвращаемого типа и используется для получения информации об ошибках, связанных с сопоставителями. matchSafely имеет единственный аргумент типа TextView с возвращаемым типом boolean, и он используется для соответствия представлению.
Окончательная версия кода выглядит следующим образом:
Наконец, мы можем использовать наш mew matcher для написания тестового примера, как показано ниже,