Зачем тестировать смену ориентации экрана в мобильном приложении?

Ответ

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

Основные цели тестирования:

  • Сохранение состояния (State Retention): Данные на экране (текст в полях, позиция прокрутки, выбранные элементы) не должны теряться или сбрасываться при повороте. Это обеспечивается правильной обработкой событий жизненного цикла Activity/Fragment (onSaveInstanceState, onRestoreInstanceState).
  • Целостность UI: Элементы интерфейса не должны накладываться, обрезаться или становиться недоступными. Вёрстка должна перестраиваться в соответствии с новыми размерами экрана.
  • Функциональность: Все интерактивные элементы должны оставаться кликабельными, а клавиатура — корректно отображаться в обеих ориентациях.
  • Производительность: Перерисовка экрана при повороте не должна вызывать заметных лагов или падений приложения.

Пример ручного тест-кейса:

  1. Открыть экран с формой.
  2. Ввести текст в поле EditText.
  3. Повернуть устройство в ландшафтную ориентацию.
  4. Ожидаемый результат: Введённый текст сохраняется в поле, форма остаётся полностью видимой и функциональной.

Автоматизация (псевдокод):

// Используя UIAutomator или Appium можно симулировать поворот
device.setOrientationLeft(); // Поворот в ландшафт
// ... проверки состояния UI ...
device.setOrientationNatural(); // Возврат в портрет
// ... проверки, что состояние сохранилось ...

Игнорирование этого типа тестирования приводит к плохому пользовательскому опыту и восприятию приложения как ненадёжного.

Ответ 18+ 🔞

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

Вот в чём, блядь, соль-то:

Чего мы хотим добиться, чтобы не было мудацких ситуаций:

  • Чтобы всё на месте оставалось (State Retention): Ввёл юзер текст в поле, повернул телефон — а там пусто, блядь! Вот это пиздец, вот это пизда! Чтобы этого не было, твоя Activity/Fragment должна уметь вовремя схватить всё состояние и потом его вытащить обратно, как из кармана. onSaveInstanceState, onRestoreInstanceState — это святое, ёпта! Прокрутку запомнить, выбранную хуйню запомнить, всё.
  • Чтобы интерфейс не разъехался (Целостность UI): Повернул — а кнопки нахрен под экран уехали, или текст на картинку налез. Этого быть не должно, блядь! Вёрстка должна быть не упоротая, чтобы и там, и тут всё красиво и доступно было.
  • Чтобы всё работало (Функциональность): Кнопки чтоб нажимались, клавиатура чтоб выезжала и не перекрывала поле ввода. Вообще, чтобы пользователь не орал: «Да как же нажать-то, блядь?!»
  • Чтобы не тормозило (Производительность): Пересобрало экран — и всё, быстро, чётко. Не должно виснуть, как будто мир перезагружается. И упасть — тем более.

Как это руками проверить, если ты не ленивая жопа:

  1. Открываешь экран, где есть форма.
  2. Вбиваешь в поле какую-нибудь похабщину, типа «тест123».
  3. Берёшь и хуяк — поворачиваешь телефон боком.
  4. И если ты не мудак, то увидишь: Твоя похабщина «тест123» так и осталась на месте, никуда не делась. И форма не разъехалась, и ты можешь дальше с ней работать. Вот это победа!

А если ты совсем умный и хочешь автоматизировать эту хуйню (псевдокод):

// Эмулируем, что пользователь — вертушка
device.setOrientationLeft(); // Повернули в ландшафт, ёба!
// ... тут проверяем, что мир не рухнул ...
device.setOrientationNatural(); // Вернули как было
// ... и снова проверяем, что всё на своих местах ...

А если этим пренебречь, то получишь, блядь, приложение-одноразовку. Пользователь повернёт телефон, всё слетит — и он тут же пошлёт тебя нахуй. И будет прав, сука. Так что не хуй собачий, а тестируй эту смену ориентации.