Пишете ли юнит и интеграционные тесты
Что проверяют
Вопрос звучит как «да или нет», но проверяют другое: что именно вы покрываете тестами и почему. Следом спросят, как вы тестируете код, который ходит в сеть, и сколько идёт прогон на пул-реквесте.
Как отвечать
Отвечайте фактами своего проекта, а не рассказом про пирамиду тестирования.
- чем:
XCTestи Swift Testing с макросами@Test,#expect,#requireи группировкой через@Suite. Swift Testing доступен с Xcode 16, умеет параметризованные кейсы и параллельный прогон, живёт в одной цели сXCTest, переезжать разом не нужно; - что покрываете: вью-модели и презентеры, маппинг ответов в доменные модели, работа с датами и валютой, правила валидации и скидок, всё с понятным входом и выходом;
- чем изолируете: зависимости за протоколами и подмена фейком, сеть через свой
URLProtocol-стаб или записанные ответы, база через контейнер Core Data или SwiftData в памяти; - интеграционные: связка слоёв целиком, например репозиторий с кэшем и маппером на фейковом транспорте, в отдельном test plan;
- UI:
XCUITestна два-три критических сценария вроде логина и покупки. Их держат мало, потому что они медленные и самые хрупкие.
Дальше про процесс: тесты гоняются на каждом пул-реквесте (xcodebuild test, Xcode Cloud или свой раннер), красный прогон блокирует мерж, покрытие это ориентир, а не цель.
Здесь особенно важны свои цифры: сколько тестов, сколько идёт прогон, что они поймали. Одна конкретная история («тест на пересчёт корзины поймал регресс при смене валюты») убеждает сильнее абзаца про пользу TDD. Если тестов было мало, так и скажите и добавьте, что делали: начали с самых больных мест, вынесли зависимости за протоколы, добавили прогон в CI.
Где спотыкаются
Отвечают «да, конечно, пишем» и замолкают. Следующий вопрос идёт про конкретику, и там выясняется, что тестов было три и все на форматирование даты.
Называют XCUITest интеграционными тестами. Это сквозные тесты поверх интерфейса, они не заменяют проверку стыков между слоями и стоят на порядок дороже.
Тянут в тесты живой бэкенд. Прогон становится медленным и мигающим, и через месяц команда перестаёт верить красному билду.