Pull to refresh

Comments 6

> Для PHP есть несколько готовых фреймворков, например Humbug и Infection. К сожалению, нам они не подошли, потому что несовместимы с SoftMocks.

А можно, пожалуйста, поподробнее? Почему они не совместимы? Казалось бы, SoftMocks должен просто быть на последней стадии перед выполнением файла, и если эти фреймворки модифицируют код перед его исполнением, то вроде нет проблем. Или они основаны на eval? Если да, то ведь при желании несложно научить SoftMocks и с eval'ом работать
Привет!

Проблема в том, как Infection модифицирует файл. Он делает перехват инклюдов через stream_wrapper_register(), и подменяет на лету заинклюженный файл на файл с мутировавшим кодом. По-сути SoftMock действуют так же, просто через другой механизм.

В результате, подружить их друг с другом довольно сложно. Это возможно, но пришлось бы очень сильно влезть в код Infection.

Выглядит так, что нужно в одно место добавить SoftMocks::rewrite(), примерно также, как сделано для phpunit

UFO just landed and posted this here
Привет, спасибо за вопрос.
Если кратко, AspectMock умеет не все что нам было нужно.
Чтобы не пересказывать детали в комментарии — приведу статья, где мы подробно рассказывали зачем нам вообще понадобились софт моки habr.com/ru/company/badoo/blog/279617

SoftMocks предоставляет апи, очень близкий к runkit, потому что до этого использовался именно он. Не уверен, что сейчас поддерживает AspectMock, но на момент перехода он много чего не умел, например перехват констант, и для перехвата встроенных функций ему требовалось указать в конфиге все функции, которые нужно перехватить, и при этом (если я правильно помню) не перехватывались бы вызовы типа \time(), то есть когда явно указан корневой неймспейс

Sign up to leave a comment.

Articles