Ответ вслух Middle Производительность и тестирование спрашивают часто обновлено

Стратегия тестирования iOS-приложения

Вопрос

Как вы организуете тестирование в iOS-проекте?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Начинается с архитектуры: если view model получает зависимости через инициализатор и протоколы, её легко тестировать. Основная масса тестов юнит: view model, форматирование, бизнес-правила, с фейками сервисов.

Что должно прозвучать в ответе

  • Архитектура для тестируемости: зависимости через протоколы и инициализатор

  • Юнит-тесты view model и бизнес-логики, async-тесты

  • Сеть через `URLProtocol`, база в памяти

  • UI-тесты только ключевых сценариев, `accessibilityIdentifier`

  • Snapshot-тесты для дизайн-системы

  • Тесты на CI на каждый PR, нестабильные тесты чинить, а не перезапускать

Что могут спросить следом

  • Как тестировать код с Task и задержками?
  • Чем Swift Testing удобнее XCTest?

Разбор

Начинается с архитектуры: если view model получает зависимости через инициализатор и протоколы, её легко тестировать. Основная масса тестов юнит: view model, форматирование, бизнес-правила, с фейками сервисов. Async-код тестирую async-тестами, а время внедряю через Clock, чтобы не ждать по-настоящему. Сетевой слой проверяю интеграционно через URLProtocol, базу на хранилище в памяти. UI-тестами покрываю 5-10 ключевых сценариев: вход, покупка, основной путь, и ищу элементы по accessibilityIdentifier. Для компонентов дизайн-системы полезны snapshot-тесты. Всё гоняется на CI на каждый пулреквест, а флаки я исправляю сразу, иначе команда перестаёт доверять тестам. Новые тесты пишу на Swift Testing: параметризация и понятные сообщения #expect.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.