Недавно мы обсуждали, стоит ли менять инструмент мокирования в юнит-тестах.
У нас есть два решения:
🧩 SHInstantMock (построен на базе InstantMock) — динамический, мощный, с магией под капотом.
Работает в рантайме, позволяет многое, но требует аккуратности: MockUsable, runtime проверки, не всегда типобезопасно.
Мы написали свои макросы для него, чтобы сократить бойлерплейт — и это реально улучшило DX.
⚡️ Spyable — простой, макросный, статически типизированный.
Меньше магии, проще дебажить, порог входа ниже.
Хочется постепенно переписать «легаси» с InstantMock на Spyable.
Возможно, даже попробовать AI-помощника для автоматического переписывания моков и тестов.
И вот главный вопрос, который у нас возник 👇
🎯 Насколько вообще целесообразно обновлять стек инструментов, если старый ещё справляется?
Зачем это делать?
💡 DX — меньше бойлерплейта, быстрее писать и читать тесты.
👥 Найм — проще входить новым инженерам, особенно если инструмент ближе к современным подходам (Swift Macros, compile-time generation).
🧱 Поддержка — статическая типизация уменьшает хрупкость кода и неожиданные падения.
🤖 Эволюция — шаг в сторону будущего Swift, где runtime-инъекции постепенно уступают compile-time инструментам.
Но есть и обратная сторона:
📉 Цена миграции (особенно если у вас сотни тестов).
🔄 Риск поломать то, что и так работает.
⏳ Возможно, это просто "движение ради движения".
По сути — мы осознанно создаём новое легаси для самих себя, надеясь, что новое решение будет более «здоровым» и предсказуемым.
❓ А вы как считаете — стоит ли обновлять инструменты, если текущие работают, или лучше выжимать максимум из старых решений?
#L #Swift #Testing #Mock #Macros #DX #AI #EngineeringPhilosophy
👏