По мере роста вашего приложения может оказаться полезным разместить некоторые компоненты вашего приложения в процессе, отличном от основного процесса вашего приложения. Чтобы протестировать компоненты приложения в этих нестандартных процессах , вы можете использовать функциональные возможности Multiprocess Espresso. Этот инструмент, доступный на Android 8.0 (уровень API 26) и выше, позволяет вам беспрепятственно тестировать взаимодействия пользовательского интерфейса вашего приложения, которые выходят за границы процесса вашего приложения, сохраняя при этом гарантии синхронизации Espresso.
При использовании Multiprocess Espresso учитывайте следующие аспекты управления версиями и областью действия:
- Ваше приложение должно быть ориентировано на Android 8.0 (уровень API 26) или выше.
- Этот инструмент может тестировать только те компоненты приложения, которые вы включаете в процессы в пакете вашего приложения. Он не может тестировать внешние процессы.
Используйте инструмент
Чтобы протестировать процесс в вашем приложении с помощью Multiprocess Espresso, добавьте ссылку на артефакт espresso-remote в файл build.gradle
вашего приложения:
классный
dependencies { ... androidTestImplementation 'androidx.test.espresso:espresso-remote:3.6.1' }
Котлин
dependencies { ... androidTestImplementation('androidx.test.espresso:espresso-remote:3.6.1') }
Вам также необходимо добавить следующее в манифест androidTest
вашего приложения:
- Элемент
<instrumentation>
, определяющий процесс. - Элемент
<meta-data>
, указывающий, что вы хотите использовать Multiprocess Espresso.
В следующем фрагменте кода показано, как добавить эти элементы:
<manifest ... package="androidx.test.mytestapp.tests"> <uses-sdk android:targetSdkVersion="27" android:minSdkVersion="14" /> <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner" android:targetPackage="androidx.test.mytestapp" android:targetProcesses="*"> <meta-data android:name="remoteMethod" android:value="androidx.test.espresso.remote.EspressoRemote#remoteInit" /> </instrumentation> </manifest>
Предыдущий фрагмент указывает платформе Android, что вы хотите, чтобы она тестировала каждый процесс в пакете вашего приложения. Если вы хотите протестировать только часть процессов вашего приложения, вы можете вместо этого указать список, разделенный запятыми, внутри элемента targetProcesses
:
<instrumentation
...
android:targetProcesses=
"androidx.test.mytestapp:myFirstAppProcessToTest,
androidx.test.mytestapp:mySecondAppProcessToTest" ... />
Понимание архитектуры инструмента
Когда вы тестируете свое приложение и запускаете его процесс по умолчанию, вы можете выполнить взаимодействие с пользовательским интерфейсом, например нажатие кнопки, которое запускает действие во вторичном процессе. Затем система выполняет следующие шаги, чтобы включить межпроцессное тестирование с помощью Espresso:
- Android Framework создает и запускает новый процесс, соответствующий навигационной структуре вашего приложения. Каждый процесс
Instrumentation
включает новый экземплярAndroidJUnitRunner
. На этом этапе два инструментальных процесса не могут взаимодействовать друг с другом. - Каждый экземпляр
AndroidJUnitRunner
регистрирует Espresso в качестве своей среды тестирования. - Два экземпляра
AndroidJUnitRunner
выполняют рукопожатие, чтобы установить соединение друг с другом. В то же время каждый экземплярAndroidJUnitRunner
соединяет всех зарегистрированных клиентов, таких как Espresso, с их соответствующими аналогами в других процессах, чтобы эти клиенты могли формировать прямой канал связи между собой. - Каждый экземпляр
AndroidJUnitRunner
продолжает искать новые экземпляры инструментов и тестировать клиентов платформы, при необходимости устанавливая дополнительные каналы связи.
Рисунок 1 иллюстрирует результат этого процесса:
Дополнительные ресурсы
Для получения дополнительной информации по этой теме обратитесь к следующим ресурсам.
- Разработка через тестирование для Android с использованием библиотеки поддержки тестирования Android. Видео сеанса Google I/O 2017, начало в 36:41.