DevPrep

Все темы › Тестирование программного обеспечения

Что мешает коду быть тестируемым: время, рандом, синглтоны, UserDefaults — и как ввести швы?

Middle PRO

Суть

Код нетестируем, когда сам дотягивается до глобального мира: Date(), Int.random, UUID(), UserDefaults.standard, Analytics.shared, Task.sleep. Такие вызовы в тесте не перехватить, и результат зависит от часов, удачи и того, что оставили предыдущие тесты. Лечится это швами (seams, термин Майкла Фезерса) — местами, где поведение можно подменить, не редактируя саму логику. В Swift самый дешёвый шов — параметр init со значением по умолчанию: продакшен-код не меняется, а тест передаёт своё.

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store