Какой опыт с unit тестированием
Что проверяют
Пишете ли вы тесты регулярно или «когда есть время», и умеете ли делать код тестируемым. Следом почти всегда просят показать, как вы тестируете асинхронный код и чем подменяете сеть.
Как отвечать
Опирайтесь на свой проект: что покрыто, сколько тестов, сколько идёт прогон в CI. Каркас:
- фреймворки: XCTest с
XCTAssertEqualи@testable import, и Swift Testing, который пришёл с Xcode 16:@Test,#expect,#require, параметризация черезarguments:. Оба живут в одном таргете, новые тесты удобно писать на втором; - тестируемость: зависимости передаются через
initи закрыты протоколами, поэтому сеть, хранилище иDate()в тесте подменяются заглушками. Рантайм-моков уровня Mockito в Swift нет, моки пишут руками или генерируют; - асинхронность:
func testLoad() async throwsиawaitпрямо в тесте, для колбэковXCTestExpectationиawait fulfillment(of:timeout:); - что тестировать: ViewModel, Presenter, Interactor, парсинг, форматтеры. Контроллер целиком покрывать юнит-тестами дорого;
- инфраструктура: test plans, покрытие в схеме Xcode, запуск
xcodebuild testили fastlane в CI на каждый merge request.
Если практики мало, так и скажите, но покажите, как бы начали: с чистой логики без UIKit и с одного сценария, который ломается чаще всего.
Где спотыкаются
Тестируют с настоящей сетью, UserDefaults.standard и текущей датой. Тесты падают по ночам и на CI, и команда перестаёт им верить.
Ждут асинхронный результат через sleep. Тест становится медленным и всё равно нестабильным, правильный путь это expectation или async.
Ставят целью процент покрытия. Высокое покрытие без проверок граничных случаев мало что гарантирует, лучше рассказать, какие баги тесты реально поймали.