Тестировать код, который опирается на статические методы или встроенные функции — задача неприятная. Обычно это заканчивается лишними абстракциями, «обёртками» и переписыванием половины приложения.
Чтобы избежать этого и писать чистые тесты без хирургии в прод-коде, появился MintyPHP Mocking — небольшая, аккуратная библиотека, которая позволяет мокировать и статические методы, и встроенные функции PHP.
🧩 Что умеет библиотека
✨ Мок статических методов
Вы указываете ожидаемый вызов и результат — и дальше обращаетесь к классу как обычно.
✨ Мок встроенных функций
В том числе
microtime(), file_get_contents(), random_int() — любые, если они вызываются в вашем namespace без слэша.✨ Никаких обвязок и костылей
Ни интерфейсов, ни врапперов, ни перегретого DI — мок просто перехватывает вызовы.
⚙️ Как это работает под капотом
🟣 Для статических методов:
Библиотека вставляет свой автолоадер раньше настоящего класса и подменяет его stub-версией. Все вызовы проходят через ваши ожидания.
🟣 Для встроенных функций:
В нужном namespace на лету создаётся функция с таким же именем. PHP всегда сначала проверяет текущий namespace и только потом глобальный — этим и пользуемся.
📌 Важные нюансы
🟢 Ожидания работают в порядке FIFO
🟢 Аргументы сверяются через
assertEquals🔴 Лишний вызов → «No expectations left»
🔴 Не все ожидания израсходованы → тест падает
🟡 Namespace имеет значение
🟡 Вызовы через
\microtime() не перехватываются🧪 Зачем это нужно?
• Тестировать код без переписывания архитектуры
• Быстро изолировать поведение зависимостей
• Проверять корректность взаимодействий, а не реализаций
• Экономить время и не городить лишние уровни абстракции
🔗 Статья с примерами
Библиотека пхпшника