Sergey
кто как тестит
Sergey
кто как структуру проекта ведет
CybernatiC
я руками
CybernatiC
или запрягаю своих подопечных
Sergey
дорого выходит и медленно
Aleksandr
у нас тестер есть
Aleksandr
пишет автотесты
Aleksandr
ну и разработчики тоже тестят
Aleksandr
+ пхп юнит
Sergey
тестер автоматизирует e2e тесты выходит?
Sergey
окей, а сам проект, как примерно структуру проекта ведете? что покрываете интеграционными тестами? Что юнитами? Сеттеры в сущностях?
Aleksandr
сетеры и гетеры в сущностях
Aleksandr
покрываем всё
Aleksandr
стремимся по крайней мере
Sergey
Sergey
то есть юнит тесты только на сервисы менеджеры
Aleksandr
на сервисы, менджеры, контроллеры, утилиты
Aleksandr
команды
Aleksandr
и т.д.
Sergey
...контроллеры?
Sergey
юнит тестами?
Aleksandr
ага
Sergey
зачем?
Aleksandr
а почему нет?
Sergey
ну то есть мы сейчас об одном и том же виде тестирования говорим?
Sergey
ну там... мокать взаимодействие тестируемого объекта с внешним миром (все что вне объекта)
Sergey
мокать поведение внешнее
Sergey
ну мол... по сути в случае контроллеров выходит что мокаются штуки, которые делигируются сервисному слою
Aleksandr
ну из внешнего тестер пишет на эмуляторе
Sergey
не понятно что проверяют такие тесты и как жить с тем что тесты полностью завязаны на реализацию
Aleksandr
имитируя поведения юзера
Sergey
меня интересует что есть "юнит тест контроллера"
Sergey
это примерно так же глупо как "юнит тест репозитория"
Aleksandr
почему же?
Sergey
потому что ты дублируешь реализацию тестируемого кода в тестах
Sergey
дублируешь мол "эта штука должна дернуть эту штуку"
Sergey
хотя тесты не должны о таких вещах знать
Sergey
любой мелкий рефакторинг - тесты красные
Aleksandr
не спорю)
Sergey
либо надо подправлять и тесты
Sergey
двойная работа
Sergey
другое дело если бы контроллеры покрывались интеграционными тестами
Sergey
у меня к примеру так:
- Model - тут почти все покрыто юнит тестами, репозитории интеграционными и если есть сервисы которые напрямую лезут в базу - тоже интеграционными.
- Handler - высокоуровневая логика. По хэндлеру на юзкейс. Интеграционные тесты.
- Service - инфраструктура. Почти полностью интеграционные тесты. Чутка юнитов
- Http - по сути там контроллеры и трансформеры для API - интеграционные тесты
Sergey
не спорю)
а зачем сеттеры в сущностях?
Aleksandr
а где?
Sergey
нигде, они не нужны. Ну у меня сеттеры еще в билдерах есть
Sergey
хотя... я правильно понимаю что у тебя проекты - web, ну мол сайтики?
Aleksandr
неа
Sergey
точнее "есть место для forms"
Aleksandr
нет
Aleksandr
ни одного сайтика
Aleksandr
и форм тоже нет
Sergey
а ну тогда сеттеры вообще не нужны
Aleksandr
ну хорошо, как ты создаешь обьекты?
Aleksandr
вот например банальная регистрация
Sergey
$user = User::builder()
->withEmail($email)
->withPassword($password, $passwordEncoder)
->withProfile(Profile::builder()
->withName($name)
->withBirthDay($birthDay)
->build()
)
->build();
Sergey
о
Sergey
пригодилось
Sergey
cеку найду в гистах
Sergey
https://gist.github.com/fesor/370b3486cf7ee96af34fcbb286bd6563
Sergey
оно конечно не дописано, я про билдеры не написал ничего
Sergey
но идея там прослеживается
Sergey
https://gist.github.com/fesor/073e6928e13e38953b728460a85e8b26
Sergey
вот еще пример на эту тему
Sergey
можно еще подробить на объекты (например Credentials, Profile и User а не просто User) и будет еще прикольнее
Sergey
тут уже уровень лени и вопросы связанности
Sergey
не получился холивар?
Sergey
ну ладно(
Aleksandr
щас почитаю
Sergey
могу сказать по своему опыту - чем расплывчатее требования, тем больше надо закладывать избыточности (больше дробить объекты и бизнес правила, больше следить за связанностью)
Sergey
много было грабель пройдено
Aleksandr
ну по поводу дробления
Aleksandr
мы выносим в микро сервисы
Aleksandr
если мы об одном и том же)
Sergey
ну я о том что бы разделить объект User например а 4 разных класса
Sergey
Credentials, User, Credentials, может еще для ролей отдельные
Sergey
зависит от проекта
Aleksandr
не, есть юзер, есть профиль, есть сеттинги
Sergey
ну понятно, короч вы боритесь за изолцию путем разделения всего на микросервисы