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

Ответ

Тестирование смены ориентации (портрет ↔ ландшафт) направлено на проверку адаптивности UI и сохранности состояния приложения.

Основные тест-кейсы:

  1. Базовая функциональность: Все элементы интерфейса и функции доступны и работают в обеих ориентациях.
  2. Сохранение состояния и данных: Введённый текст, выбранные элементы, позиция прокрутки, состояние медиаплеера (пауза/воспроизведение) не должны сбрасываться при повороте.
  3. Целостность UI: Элементы не накладываются, не обрезаются, сохраняют читаемость и пропорции. Проверяются все экраны и диалоги.
  4. Производительность: Поворот экрана не должен вызывать заметных лагов или падений FPS.
  5. Обработка фиксированной ориентации: Если приложение или отдельный экран поддерживает только одну ориентацию, проверяется, что автоповорот заблокирован.
  6. Особые случаи: Поворот во время анимации, загрузки данных или отображения клавиатуры.

Пример теста на Android (Espresso):

@Test
fun testInputPersistsOnOrientationChange() {
    // 1. Ввести текст в портретной ориентации
    onView(withId(R.id.editText)).perform(typeText("Test Input"))

    // 2. Сменить ориентацию на ландшафтную
    activityScenario.onActivity { activity ->
        activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
    }

    // 3. Проверить, что текст сохранился
    onView(withId(R.id.editText)).check(matches(withText("Test Input")))
}

Ответ 18+ 🔞

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

Смотри, в чём суть, блядь. Ты крутишь телефон, а приложение не должно сходить с ума, как мартышлюшка на банане. Вот на что смотреть надо, чтоб не облажаться:

  1. Всё ли на месте и кликается? Это же очевидно, блядь! Кнопки, поля, меню — всё должно быть доступно и в портрете, и когда ты положил девайс набок. Если после поворота половина интерфейса уехала за экран — это пиздец, а не релиз.
  2. Не забыло ли оно, чем ты занимался? Вот представь: ты пишешь гениальное сообщение, поворачиваешь экран, а там — пустое поле, блядь! Или смотрел видосик, повернул, а он с начала начал. Это же волнение ебать! Текст, выбор в чекбоксах, позиция в списке, пауза в видео — всё должно остаться, как было. Состояние — святое!
  3. Не превратилось ли всё в кашу? Элементы не должны налезать друг на друга, как пьяные в маршрутке. Шрифты читаемые, картинки не расплющенные. Каждый экран, каждое всплывающее окно — всё на проверку, блядь.
  4. Не тормозит ли? Поворот — это не повод для приложения уйти в раздумья на пять секунд. Если после смены ориентации интерфейс дёргается или виснет — пидарас шерстяной, оптимизацию проёбывают.
  5. А если нельзя крутить? Бывает же, что какая-то хрень должна быть только вертикальной или только горизонтальной. Ну так проверь, что автоповорот там реально не работает, а не просто дизайн кривой!
  6. Ловим момент, сука! Самые интересные баги вылезают, когда ты делаешь поворот во время чего-то: в середине анимации, когда грузятся данные или когда клавиатура торчит. Вот тут-то и проявляется вся криворукость кода, блядь.

Ну и чтобы не быть голословным, вот тебе кусок кода, как это примерно проверяют на Андроиде. Смотри, тут вся магия:

@Test
fun testInputPersistsOnOrientationChange() {
    // 1. Ввести текст в портретной ориентации
    onView(withId(R.id.editText)).perform(typeText("Test Input"))

    // 2. Сменить ориентацию на ландшафтную
    activityScenario.onActivity { activity ->
        activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
    }

    // 3. Проверить, что текст сохранился
    onView(withId(R.id.editText)).check(matches(withText("Test Input")))
}

Вот и весь сказ, блядь. Казалось бы, ерунда. Но если на этом сэкономить, пользователь получит опыт уровня «в рот меня чих-пых», когда его любимое приложение обнуляет все его труды от одного неловкого движения рукой. А нам такое не надо, правда?