Если в вашем приложении для Android есть экраны с функциями камеры и/или галереи с некоторыми изменениями экрана (представления, метки или кнопки, которые появляются/исчезают и т. д.), и вам нужно написать несколько тестов Espresso для этих функций/экранов, есть пара помощников, которые я использовал, и я хочу поделиться со всеми вами. Предоставление разрешений Когда вы используете камеру в своем приложении, вам необходимо предоставить некоторые разрешения на устройстве, чтобы читать / хранить фотографии. Эти разрешения запрашиваются во время выполнения и обычно связаны с READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE.
Таким образом, GrantPermissionRule позволяет предоставлять разрешения во время выполнения на Android M (API 23) и выше, и при применении к тестовому классу это правило пытается предоставить все запрошенные разрешения во время выполнения. @get:Rulevar mRuntimePermissionRule = GrantPermissionRule.grant(android.
Manifest.permission.WRITE_EXTERNAL_STORAGE) Это правило обычно используется для предоставления разрешений во время выполнения, чтобы избежать появления диалогового окна разрешений и блокировки пользовательского интерфейса приложений, и согласно официальной документации: согласно этому правилу автоматически предоставляется READ_EXTERNAL_STORAGE, когда запрашивается WRITE_EXTERNAL_STORAGE. Галерея ТестКод для test, когда в приложении щелкают значок галереи, затем изображение выбирается и отображается на экране: во-первых, у меня есть вспомогательный метод (CameraAndGallery.
savePickedImage), который сначала сохраняет изображение (для краткости значок ic_launcher), которое будет использоваться в тесте в качестве локального файла, видимого для теста: Параметр активности берется из ActivityTestRule:@get:Rulevar mActivityTestRule = IntentsTestRule(MyActivity: :class.java) Затем я создаю объект ActivityResult (например, макет, но для намерения Android), который будет использоваться средством сопоставления намерений Espresso (для сопоставления и проверки исходящих намерений): val imgGalleryResult = CameraAndGallery.createImageGallerySetResultStub(mActivityTestRule.
Activity) намереваясь (hasAction (Intent.ACTION_CHOOSER)). RespondWith (imgGalleryResult) Секрет здесь в том, чтобы запросить файл, ранее сохраненный и, наконец, использованный в качестве результата.
Примечание. Чтобы работать с намерениями эспрессо, мы должны добавить эту зависимость в сборку приложений. файл градиента: androidTestImplementation androidx.test.
espresso:espresso-intents:$espressoVersionДля теста, который мы пишем, давайте предположим, что изображение, выбранное из галереи, мы устанавливаем его в ImageView, который виден пользователю, затем заключительная часть теста заключается в проверке того, что отображается изображение (метод hasImageSet()):onView(withId(R.id.auctionphotos_bigimage_viewer)).
check(matches(hasImageSet()))Camera TestПохоже на Gallery Test, тест на получение изображения с камеры устройства проходит почти те же шаги, но в этом случае изображение не нужно предварительно сохранять, а только имитировать результат камера: результат имитации захвата выглядит следующим образом: результирующее изображение будет получено намерением: намерение (hasAction (MediaStore. ACTION_IMAGE_CAPTURE)). responseWith(imgCaptureResult) И с помощью этого мы можем проверить, было ли изображение снято и отображено: onView(withId(R.
id.auctionphotos_bigimage_viewer)).check(matches(hasImageSet())) Наконец, если вы хотите изучить немного больше информации о тестах эспрессо и намерениях, вы можете взглянуть на этот репозиторий от официальной команды Android
Шэньчжэнь TigerWong Technology Co.,Ltd
Тел:86 13717037584
Электронная почта: info@sztigerwong.com
Добавить: 1-й этаж, здание А2, Индустриальный парк Silicon Valley Power Digital, № 1. улица Дафу, 22, улица Гуанлан, район Лунхуа,
Шэньчжэнь, провинция Гуандун, Китай