Size: a a a

2019 December 31

MM

Maksim Masiukevich in PHP
Заменить потом реализацию на интерфейс, если надо, дело 5 минут
источник

EY

Eugene Yurkevich in PHP
knopkod4v
вообще тут недавно хорошую статью скидывали по final-у (хотя это тема про наследование скорее) с хабра же, в каком-то из чатов и там в комментах вроде тоже было любопытно
ага, почитал по диагонали, не осилил
источник

EY

Eugene Yurkevich in PHP
makes sense
источник

EY

Eugene Yurkevich in PHP
Maksim Masiukevich
Файнал не обязывает интерфейсы клепать, если чо
не обязывают - да, но, как их мокать тогда в тестах?
источник

MM

Maksim Masiukevich in PHP
А что и зачем ты мокать собрался?) В этом и проьлема
источник

K

Katulos⠀ in PHP
мокай закусь в соус
источник

K

Katulos⠀ in PHP
И закусывай!
источник

EY

Eugene Yurkevich in PHP
unit tests, обычная практика)
источник

MM

Maksim Masiukevich in PHP
Не вижу ничего обычного, или необычного. И нахуй в юнитах моки, тоже не оч ясно
источник

SP

Sergey Protko in PHP
Eugene Yurkevich
Я чего спрашиваю, просто ни разу не делал свой класс final😭  
1. Какие плюсы final дает?
Не дает унаследовать класс - ок. Но, в чем реальный плюс? Дает понять что "у тебя не должно быть мысли наследовать этот класс"? Так-то следующим коммитом я могу снести final, если оно не в vendor.
2. как с phpunit тестировать классы зависящие от final класса?  Я вижу следующие варианты:
- а. мокать интерфейс если final класс его имеет.
- b. Передавать весь сервис-контейнер в конструктор и в тесте мокать контейнер get(). - но, это хрень на мой вгзляд, нафига передавать весь контейнер если намного наглядней передать конкретные зависимости.
Так, все таки, как тестировать код зависящий от final класса? Или не должно быть такой ситуации когда код зависит от конкретного final класса, а должен зависеть только от интерфейса (пункт а)
источник

EY

Eugene Yurkevich in PHP
Проверяем, что будет вызван такой-то метод такого-то сервиса. Сервис может и в базу лезть и ракету на луну посылать, поэтому мокаем.
источник

SP

Sergey Protko in PHP
эта статья полностью отвечает на все твои вопросы
источник

SP

Sergey Protko in PHP
> TL;DR: Make your classes always final, if they implement an interface, and no other public methods are defined
источник

MM

Maksim Masiukevich in PHP
Eugene Yurkevich
Проверяем, что будет вызван такой-то метод такого-то сервиса. Сервис может и в базу лезть и ракету на луну посылать, поэтому мокаем.
мб в этом и проблема?) а не в файналах
источник

SP

Sergey Protko in PHP
Maksim Masiukevich
мб в этом и проблема?) а не в файналах
в чем проблема с моками?
источник

MM

Maksim Masiukevich in PHP
Sergey Protko
в чем проблема с моками?
да нет в них особой проблемы
источник

EY

Eugene Yurkevich in PHP
в том-то и проблема что finаl класс посылающий ракету не мокается если у него нет интерфейса
источник

SP

Sergey Protko in PHP
Eugene Yurkevich
Я чего спрашиваю, просто ни разу не делал свой класс final😭  
1. Какие плюсы final дает?
Не дает унаследовать класс - ок. Но, в чем реальный плюс? Дает понять что "у тебя не должно быть мысли наследовать этот класс"? Так-то следующим коммитом я могу снести final, если оно не в vendor.
2. как с phpunit тестировать классы зависящие от final класса?  Я вижу следующие варианты:
- а. мокать интерфейс если final класс его имеет.
- b. Передавать весь сервис-контейнер в конструктор и в тесте мокать контейнер get(). - но, это хрень на мой вгзляд, нафига передавать весь контейнер если намного наглядней передать конкретные зависимости.
Так, все таки, как тестировать код зависящий от final класса? Или не должно быть такой ситуации когда код зависит от конкретного final класса, а должен зависеть только от интерфейса (пункт а)
1. запрет расширения через наследование, если ты этого не предполагаешь на этапе проектирования класса
2. final вешается там где есть интерфейс либо не подразумевается что это что-то надо мокать (например ты не будешь мокать DateTime класс и расширять можешь не давать по дефолту).
источник

MM

Maksim Masiukevich in PHP
вопрос в использовании) у тебя юнит тест куда-то лазит, что-то делает, по пути ещё в базу пишет) и ты такой, а мокну-ка я его. Нет же проблем никаких
источник

SP

Sergey Protko in PHP
Maksim Masiukevich
вопрос в использовании) у тебя юнит тест куда-то лазит, что-то делает, по пути ещё в базу пишет) и ты такой, а мокну-ка я его. Нет же проблем никаких
честно - нихуя не понятно какую мысль ты пытаешься выразить
источник