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