Учебники

Индивидуальные представления соответствия

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 для написания тестового примера, как показано ниже,