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

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

Во-первых, проверьте, что ваше приложение не падает при изменении конфигурации. Убедитесь, что каждый пользовательский интерфейс в вашем приложении может обрабатывать любую комбинацию поворота, изменения размера или сворачивания. Поскольку изменения конфигурации по умолчанию воссоздают активность, некоторые сбои происходят из-за предположений о постоянстве активности.
Существует несколько способов проверки изменений конфигурации, но в большинстве случаев используются два способа проверки:
- В Compose используйте
StateRestorationTester
для эффективной имитации изменения конфигурации без перезапуска активности. Для получения дополнительной информации см. следующие разделы. - В любом тесте пользовательского интерфейса, например Espresso или Compose, имитируйте изменение конфигурации, вызвав
Activity.recreate()
.
Обычно вам не нужно использовать разные устройства для тестирования восстановления состояния в ответ на изменения конфигурации. Это связано с тем, что все изменения конфигурации, которые воссоздают активность, имеют схожие последствия. Однако некоторые изменения конфигурации могут запускать разные механизмы восстановления состояния на определенных устройствах.
Например, когда пользователь просматривает пользовательский интерфейс со списком деталей на открытом складном устройстве и складывает устройство, чтобы переключиться на передний дисплей, пользовательский интерфейс обычно переключается на страницу деталей. Автоматизированный тест должен охватывать это восстановление состояния пользовательского интерфейса, включая состояние навигации.
Для проверки изменений конфигурации, которые происходят на устройствах при переходе с одного дисплея на другой или переходе в многооконный режим, у вас есть несколько вариантов:
- Используя любое устройство, измените размер экрана во время теста. В большинстве случаев это запускает все механизмы восстановления состояния, которые вам нужно проверить. Однако этот тест не будет работать для логики, которая определяет определенные позы в складных предметах, поскольку изменения позы не запускают изменение конфигурации.
- Используя устройство или эмулятор, поддерживающий функции, которые вы хотите протестировать, запустите соответствующие изменения конфигурации. Например, складной планшет или планшет можно контролировать с помощью Espresso Device, чтобы перевести из сложенного в раскрытое плоское положение в альбомной ориентации. См. раздел Espresso Device в разделе Библиотеки и инструменты для тестирования различных размеров экрана, чтобы получить примеры.
Типы тестов для разных размеров экрана и окна
Используйте соответствующий тип теста для каждого варианта использования, чтобы убедиться, что тест работает правильно в различных форм-факторах:
Тесты поведения пользовательского интерфейса запускают некоторую часть пользовательского интерфейса приложения, например, отображение активности. Тесты проверяют, существуют ли определенные элементы или имеют ли они определенные атрибуты. Тесты могут дополнительно выполнять имитированные действия пользователя. Для представлений используйте Espresso . Jetpack Compose имеет собственные API тестирования . Тесты поведения пользовательского интерфейса могут быть инструментированными или локальными . Инструментированные тесты запускаются на устройствах или эмуляторах, в то время как локальные тесты пользовательского интерфейса запускаются на Robolectric на JVM.
Используйте тесты поведения пользовательского интерфейса, чтобы проверить правильность реализации навигации в приложении. Тесты выполняют такие действия, как щелчки и смахивания. Тесты поведения пользовательского интерфейса также проверяют наличие определенных элементов или свойств. Для получения дополнительной информации см. раздел Автоматизация тестов пользовательского интерфейса .
Тесты скриншотов делают снимок экрана пользовательского интерфейса или компонента и сравнивают изображение с ранее одобренным снимком экрана. Это очень эффективный способ защиты от регрессий, поскольку один снимок экрана может охватывать большое количество элементов и их визуальных свойств. Вы можете запустить тесты скриншотов на JVM или на устройствах. Доступно несколько фреймворков для тестирования скриншотов. Для получения дополнительной информации см. тесты скриншотов .
Наконец, вам могут понадобиться модульные тесты для проверки функциональности логических единиц, которые ведут себя по-разному в зависимости от типа устройства или размера окна, но в этой области модульные тесты встречаются реже.
Следующие шаги
Дополнительную информацию о том, как реализовать проверки, содержащиеся в этом документе, см. в разделе Библиотеки и инструменты .