Comments 6
> Для PHP есть несколько готовых фреймворков, например Humbug и Infection. К сожалению, нам они не подошли, потому что несовместимы с SoftMocks.
А можно, пожалуйста, поподробнее? Почему они не совместимы? Казалось бы, SoftMocks должен просто быть на последней стадии перед выполнением файла, и если эти фреймворки модифицируют код перед его исполнением, то вроде нет проблем. Или они основаны на eval? Если да, то ведь при желании несложно научить SoftMocks и с eval'ом работать
А можно, пожалуйста, поподробнее? Почему они не совместимы? Казалось бы, SoftMocks должен просто быть на последней стадии перед выполнением файла, и если эти фреймворки модифицируют код перед его исполнением, то вроде нет проблем. Или они основаны на eval? Если да, то ведь при желании несложно научить SoftMocks и с eval'ом работать
0
Привет!
Проблема в том, как Infection модифицирует файл. Он делает перехват инклюдов через stream_wrapper_register(), и подменяет на лету заинклюженный файл на файл с мутировавшим кодом. По-сути SoftMock действуют так же, просто через другой механизм.
В результате, подружить их друг с другом довольно сложно. Это возможно, но пришлось бы очень сильно влезть в код Infection.
Проблема в том, как Infection модифицирует файл. Он делает перехват инклюдов через stream_wrapper_register(), и подменяет на лету заинклюженный файл на файл с мутировавшим кодом. По-сути SoftMock действуют так же, просто через другой механизм.
В результате, подружить их друг с другом довольно сложно. Это возможно, но пришлось бы очень сильно влезть в код Infection.
0
UFO just landed and posted this here
Привет, спасибо за вопрос.
Если кратко, AspectMock умеет не все что нам было нужно.
Чтобы не пересказывать детали в комментарии — приведу статья, где мы подробно рассказывали зачем нам вообще понадобились софт моки habr.com/ru/company/badoo/blog/279617
Если кратко, AspectMock умеет не все что нам было нужно.
Чтобы не пересказывать детали в комментарии — приведу статья, где мы подробно рассказывали зачем нам вообще понадобились софт моки habr.com/ru/company/badoo/blog/279617
+1
SoftMocks предоставляет апи, очень близкий к runkit, потому что до этого использовался именно он. Не уверен, что сейчас поддерживает AspectMock, но на момент перехода он много чего не умел, например перехват констант, и для перехвата встроенных функций ему требовалось указать в конфиге все функции, которые нужно перехватить, и при этом (если я правильно помню) не перехватывались бы вызовы типа \time(), то есть когда явно указан корневой неймспейс
+2
Sign up to leave a comment.
Монолит для сотен версий клиентов: как мы пишем и поддерживаем тесты