Size: a a a

2021 August 26

SP

Sergey Protko in symfony
это к вопросу "а что ты мокаешь"
источник

ЕК

Евгений Котов... in symfony
ага, похоже на то
источник

SP

Sergey Protko in symfony
если у тебя есть внешняя зависимость которую ты не контролируешь (не ты контракт определил и ты на него не влияешь) то это нельзя мокать
источник

SP

Sergey Protko in symfony
например - вот у тебя есть Request условный симфоневый. или доктриновский array collection. или энвелопы у messages. Это просто не надо мокать. Более того - это и так обычно объекты без внешних зависимостей, контейнеры для данных. их вообще не надо мокать особо
источник

SP

Sergey Protko in symfony
это как мокать DateRange например - это ж тупо
источник

D

Dmitry in symfony
надо только уточнять что не нужно такое мокать если оно куда-то там не лезет
источник

D

Dmitry in symfony
и такое бывает, к сожалению
источник

SP

Sergey Protko in symfony
ну да, если у этого чего-то есть свои зависимости ты об этом быстро узнаешь в попытке инстанцировать это что-то в тесте)
источник

D

Dmitry in symfony
да, а когда оно куда-то лезет, оно используется и нельзя мокнуть, вот это боль
источник

SP

Sergey Protko in symfony
Очень помогает с "а что мокать и как мокать" такое ограничение - если у тебя есть "что-то" что ты хочешь замокать - этот твой мок должен ПОЛНОСТЬЮ (без каких-либо исключений) предоставить описание контракта. повторюсь - полностью. С учетом всех нюансов аля есть у тебя array collection с методом length и isEmpty и они должны вести себя соответственно. Если length возвращает 0 то isEmpty true и т.д.
источник

SP

Sergey Protko in symfony
я стараюсь логику тогда из этого места куда-то вынести и оставить инфраструктурную грязь там где оркестрация - нет ифов нет нужны в юнитах. приемочные тесты покроют
источник

ЕК

Евгений Котов... in symfony
согласен со всем
хотя конкретно с Envelope мне как-то неочевидно, он принимает только сообщение, но мне нужен Envelope с разным состоянием счетчика) ну я такой и пошел мокать)
источник

D

Dmitry in symfony
иногда и они не помогают :( потому это что-то лезет на куда-то свой сервер, который нельзя изменить..
приходится городить вариант "полностью предоставить описание контракта"
источник

SP

Sergey Protko in symfony
ну вот я выше написал что поможет. перестать юзать моки для "я тут только этот метод юзаю - только его и хочу подменить".

контракты надо реализовывать полностью
источник

SP

Sergey Protko in symfony
это должно не "приходиться" а "по дефолту". Люди херовые контракты делают потому что не соблюдают это правило
источник

D

Dmitry in symfony
а в чем смысл весь контракт делать ?
у вас используется только один метод, который и нужно мокнуть
просто делаем его во всех вариациях чтобы собственный код был готов
смысл мокать еще и другие методы ?
источник

SP

Sergey Protko in symfony
потому что не воспринимают контракт как "договоренность о поведении между двумя объектами", просто делают интерфейсы в вакууме
источник

SP

Sergey Protko in symfony
смысл в том что бы твои тесты не делали предположений о том что твоя реализация использует а что нет. что бы уменьшить связанность. Что бы проверить качество и специализацию контрактов
источник

gp

gogi power in symfony
@fes0r в проектах пишите подобные контракты для 3d party интеграций ?

наподобии етой: https://github.com/symfony/cache-contracts
источник

SP

Sergey Protko in symfony
Нет, зачем.
источник