Стратегия тестирования iOS-приложения
Вопрос
Как вы организуете тестирование в iOS-проекте?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Архитектура для тестируемости: зависимости через протоколы и инициализатор
Юнит-тесты 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 ошибок.
Ещё по теме «Производительность и тестирование»
- Тест в Swift Testing
- Hang и hitch: разница
- Пирамида тестов в iOS
- Тестирование сетевого слоя через URLProtocol
- Бюджет кадра на iPhone с ProMotion
- Сколько памяти занимает декодированная картинка
- Приложение пропадает без крэш-лога
- Задача на Swift: статистика рывков по длительностям кадров