Тестируйте разные размеры экрана и окон

Тестирование — неотъемлемая часть процесса разработки приложения. Обычно вы запускаете приложения на эмуляторе или устройстве, чтобы вручную убедиться, что ваш код работает должным образом. Однако ручное тестирование занимает много времени, подвержено ошибкам и часто неуправляемо для приложений, которые работают на экранах и устройствах разных размеров. Проблемы ручного тестирования чаще всего являются результатом использования одного устройства для разработки. В результате ошибки могут остаться незамеченными на других устройствах другого форм-фактора.

Чтобы выявить регрессии для разных размеров окон и экранов, внедрите автоматические тесты, чтобы убедиться, что поведение и внешний вид вашего приложения одинаковы в разных форм-факторах. Автоматизированные тесты выявляют проблемы на ранней стадии, снижая риск возникновения проблем, влияющих на взаимодействие с пользователем.

Что протестировать

При разработке пользовательских интерфейсов для разных размеров экрана и окон обратите особое внимание на два аспекта:

  1. Как визуальные атрибуты компонентов и макетов различаются на окнах разных размеров
  2. Как состояние сохраняется при изменении конфигурации

Визуальные атрибуты

Независимо от того, настраиваете ли вы пользовательский интерфейс для окон разных размеров или нет, вам следует убедиться, что пользовательский интерфейс отображается правильно. Учитывайте ширину и высоту: компактные, средние и расширенные. Рекомендуемые точки останова см. в разделе Классы размеров окон .

Рис. 1. Экран «Для вас» в Now In Android в окнах разных размеров.

Кроме того, ваше приложение может не отображать некоторые компоненты вашей системы дизайна должным образом, если их ограничения по размеру расширены.

Если в вашем приложении есть адаптивные макеты для окон разных размеров, у вас должны быть автоматизированные тесты, чтобы предотвратить регрессии. Например, исправление полей на телефоне может привести к несоответствию макета на планшете. Создавайте тесты пользовательского интерфейса для проверки поведения макетов и компонентов или создавайте тесты снимков экрана для визуальной проверки макетов.

Государственное восстановление

Приложения, работающие на таких устройствах, как планшеты, поворачиваются и изменяются в размерах гораздо чаще, чем приложения на телефонах. Кроме того, складные устройства предоставляют новые возможности отображения, такие как складывание и раскладывание, что может привести к изменению конфигурации . Ваше приложение должно иметь возможность восстанавливать состояние при возникновении этих изменений конфигурации. Затем вам также необходимо написать тесты, которые подтвердят, что ваше приложение правильно восстанавливает состояние.

Рис. 2. Складное устройство в сложенном состоянии, в раскрытом положении, в раскрытом положении, повернутом в альбомную ориентацию, и наполовину раскрыто (столешница).

Сначала убедитесь, что ваше приложение не аварийно завершает работу при изменении конфигурации. Убедитесь, что каждый пользовательский интерфейс вашего приложения поддерживает любую комбинацию поворота, изменения размера или складывания. Поскольку изменения конфигурации по умолчанию воссоздают действие, некоторые сбои происходят из-за предположений о постоянстве действия.

Существует несколько способов протестировать изменения конфигурации, но в большинстве случаев есть два способа тестирования:

  • В Compose используйте StateRestorationTester для эффективного моделирования изменения конфигурации без перезапуска действия. Дополнительные сведения см. в следующих разделах.
  • В любом тесте пользовательского интерфейса, таком как Espresso или Compose, имитируйте изменение конфигурации, вызывая Activity.recreate() .

Как правило, вам не нужно использовать разные устройства для проверки восстановления состояния в ответ на изменения конфигурации. Это связано с тем, что все изменения конфигурации, которые воссоздают действие, имеют одинаковые последствия. Однако некоторые изменения конфигурации могут активировать различные механизмы восстановления состояния на определенных устройствах.

Например, когда пользователь просматривает пользовательский интерфейс со списком подробностей на открытом складном устройстве и складывает устройство, чтобы переключиться на передний дисплей, пользовательский интерфейс обычно переключается на страницу сведений. Автоматизированный тест должен охватывать восстановление состояния пользовательского интерфейса, включая состояние навигации.

Чтобы протестировать изменения конфигурации, которые происходят на устройствах, переходящих с одного дисплея на другой или переходящих в многооконный режим, у вас есть несколько вариантов:

  • Используя любое устройство, измените размер экрана во время теста. В большинстве случаев это запускает все механизмы восстановления состояния, которые необходимо проверить. Однако этот тест не будет работать для логики, которая определяет определенные положения складных элементов, поскольку изменения положения не вызывают изменения конфигурации.
  • Используя устройство или эмулятор, поддерживающий функции, которые вы хотите протестировать, инициируйте соответствующие изменения конфигурации. Например, складным планшетом или планшетом можно управлять с помощью устройства Espresso Device, чтобы перемещать его из сложенного в открытое положение в горизонтальной ориентации. Примеры см. в разделе «Устройства для приготовления эспрессо» в разделе «Библиотеки и инструменты» для тестирования экранов разных размеров .
Рисунок 3. Складывание и раскладывание устройства.

Виды тестов для разных размеров экрана и окон

Используйте соответствующий тип теста для каждого варианта использования, чтобы убедиться, что тест работает правильно в разных форм-факторах:

  • Тесты поведения пользовательского интерфейса запускают некоторую часть пользовательского интерфейса приложения, например отображение действия. Тесты проверяют, что определенные элементы существуют или имеют определенные атрибуты. Тесты могут дополнительно моделировать действия пользователя. Для просмотров используйте Espresso . Jetpack Compose имеет собственные API для тестирования . Тесты поведения пользовательского интерфейса могут быть инструментальными или локальными . Инструментированные тесты выполняются на устройствах или эмуляторах, а локальные тесты пользовательского интерфейса выполняются на Robolectric на JVM.

    Используйте тесты поведения пользовательского интерфейса, чтобы убедиться, что реализация навигации в приложении правильна. Тесты выполняют такие действия, как щелчки и пролистывания. Тесты поведения пользовательского интерфейса также проверяют наличие определенных элементов или свойств. Дополнительные сведения см. в разделе Автоматизация тестов пользовательского интерфейса .

  • Скриншот-тесты делают снимок пользовательского интерфейса или компонента и сравнивают изображение с ранее утвержденным снимком экрана. Это очень эффективный способ защиты от регрессий, поскольку один скриншот может охватывать большое количество элементов и их визуальных свойств. Вы можете запускать скриншоты-тесты на JVM или на устройствах. Доступно несколько платформ для тестирования снимков экрана.

Наконец, вам могут понадобиться модульные тесты для проверки функциональности модулей логики, которые ведут себя по-разному в зависимости от типа устройства или размера окна, но модульные тесты в этой области встречаются реже.

Следующие шаги

Дополнительные сведения о том, как реализовать проверки, содержащиеся в этом документе, см. в разделе Библиотеки и инструменты .