> Что нового в последних версиях Android и iOS с точки зрения тестирования? (iOS, Swift, Android)

Уровень: senior · Роль: qa · Категория: Технические вопросы

Компании: Т-Банк

Стек: iOS, Swift, Android

> Пример ответа

Короткий ответ

В последних версиях Android и iOS появились значимые изменения для тестирования: Android 14+ усилил ограничения на background activity launches и добавил predictive back gesture, что требует обновления тестов. iOS 17+ ввёл новые возможности XCUITest, включая улучшенную работу с Dynamic Island и более строгие требования к permissions. Ключевой тренд - усиление приватности, что ломает старые подходы к тестированию push-уведомлений и доступа к фото/локации. Также обе платформы активно развивают инструменты для UI-тестирования на базе Compose (Android) и SwiftUI (iOS).

Подробное объяснение

Android 14/15:

  • Запрет на запуск activity в фоне из-за ограничений на startActivity() из background - тесты, которые полагались на это, требуют переработки.
  • Predictive back gesture (Android 14+) - системный back теперь генерирует OnBackPressedCallback и требует проверки анимаций и переходов.
  • Ужесточение разрешений: частичный доступ к фото и видео (Android 14) - тесты должны учитывать выбор конкретных медиафайлов.
  • Compose UI testing - стабильный API для тестирования Compose-интерфейсов, включая ComposeTestRule и семантические деревья.

iOS 17/18:

  • XCUITest: улучшенная поддержка SwiftUI - XCUIElement теперь корректно работает с новыми типами (например, scrollView с contentUnavailableView).
  • Dynamic Island и Live Activities - требуют новых проверок в UI-тестах (например, ожидание появления элемента в XCUIApplication().otherElements).
  • Ужесточение privacy: системные диалоги разрешений теперь нельзя автоматически обойти без предварительной настройки XCUIApplication().resetAuthorizationStatus(for:).
  • Xcode 15+ поддерживает параллельное выполнение UI-тестов на симуляторах с разными локалями.

Общие тренды:

  • Переход от монолитных тестов к модульным с использованием TestPlan (Xcode) и Gradle Managed Devices (Android).
  • Усиление роли эмуляторов/симуляторов: поддержка ARM-архитектуры и ускорение запуска.
  • Рост значимости тестирования accessibility - обе платформы добавили новые API для проверки VoiceOver/TalkBack.

На практике

  • Для Android: обновите тесты, которые используют ActivityScenario - теперь нужно явно управлять жизненным циклом с учётом ограничений на background.
  • Для iOS: используйте XCUIApplication().launchArguments для настройки состояния permissions до запуска теста, чтобы избежать системных диалогов.
  • Настройте CI: для Android - Gradle Managed Devices с профилями API 34+, для iOS - xcodebuild test-without-building с параллельными симуляторами.
  • Проверяйте совместимость: старые тесты, написанные для Android 12 и iOS 15, могут падать из-за изменений в жестах и permissions.

Пример кода

Android (Compose UI test с учётом predictive back):

@Test
fun testBackGesture() {
    composeTestRule.setContent { MyApp() }
    composeTestRule.onNodeWithTag("detail_screen").assertIsDisplayed()
    
    // Имитация системного back gesture
    composeTestRule.activityRule.scenario.onActivity { activity ->
        activity.onBackPressedDispatcher.onBackPressed()
    }
    
    composeTestRule.onNodeWithTag("main_screen").assertIsDisplayed()
}

iOS (XCUITest с permissions):

SWIFT
func testLocationPermission() {
let app = XCUIApplication()
app.launchArguments += ["-AppleLanguages", "(ru)"]
app.resetAuthorizationStatus(for: .location)
app.launch()
let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard")
let allowButton = springboard.buttons["Разрешить"]
if allowButton.waitForExistence(timeout: 5) {
allowButton.tap()
}
XCTAssertTrue(app.staticTexts["location_ready"].exists)
}

Как отвечать на собеседовании

  • Начните с конкретных версий ОС и их номеров - это покажет актуальность знаний.
  • Свяжите изменения с практическими проблемами: например, "в Android 14 мы столкнулись с тем, что тесты на push-уведомления стали требовать явного разрешения на фоновую активность".
  • Упомяните инструменты, которыми пользуетесь: adb, xcrun simctl, Gradle Managed Devices, XCTestPlan.
  • Покажите понимание trade-off: например, ужесточение приватности усложняет тесты, но повышает безопасность пользователей.
  • Если спросят про конкретную фичу - предложите написать тест-кейс или фрагмент кода.

Что проверяет интервьюер

  • Актуальность знаний: знаете ли вы реальные изменения в Android 14/15 и iOS 17/18.
  • Практический опыт: умеете ли вы адаптировать существующие тесты под новые ограничения.
  • Понимание архитектуры тестов: как вы организуете тесты с учётом permissions, lifecycle и жестов.
  • Способность к анализу: видите ли вы влияние изменений на стратегию тестирования в целом.

Типичные ошибки

  • Перечисление всех фич ОС без привязки к тестированию - интервьюер ждёт конкретики.
  • Игнорирование обратной совместимости: "мы тестируем только на последней версии" - плохой ответ.
  • Утверждение, что изменения не влияют на тесты - это показывает отсутствие практики.
  • Путаница между Android и iOS: например, приписывание resetAuthorizationStatus Android.
  • Отсутствие примеров кода или тест-кейсов - ответ должен быть доказательным.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью