|
|
**Тестопригодный дизайн (Testable Design) — это архитектурный подход**, при котором система проектируется таким образом, чтобы ее компоненты могли быть легко, быстро и изолированно протестированы. Высокая связанность (tight coupling) и скрытые зависимости — главные враги тестируемости. Ключевым приемом для борьбы с ними является **Инверсия зависимостей (Dependency Inversion Principle, DIP)**, реализуемая через механизм **Внедрения зависимостей (Dependency Injection, DI)**, который передает зависимости компоненту извне, а не позволяет ему создавать их самостоятельно.
|
|
|
С технической точки зрения, DI **позволяет заменять реальные реализации зависимостей на тестовые дублеры (test doubles)** — моки (mocks), стабы (stubs), фейки (fakes). Это делает модульные тесты быстрыми (не требуют базы данных или внешнего API) и стабильными (не зависят от внешних сбоев). Архитектурные паттерны, такие как **Гексагональная архитектура (Hexagonal) или Чистая архитектура**, формализуют этот подход, разделяя систему на «ядро» (бизнес-логика) и «адаптеры» (работа с БД, UI, внешними сервисами). Зависимости направляются *извне внутрь* к ядру, которое ничего не знает о деталях реализации адаптеров.
|