Как стать автором
Обновить

Mock-объект в рабочем коде, или как тестовый двойник помог решить проблему излишне связанного кода

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров685
Рейтинг0
Комментарии5

Комментарии 5

new class(new UnnecessaryDomainClass())

А зачем, если анонимный класс можно сделать таким ?

$dataForBladeTemplate = new class() extends DataForBladeTemplate {
    public string $fieldOne;
    public string $fieldTwo;
    public string $fieldThree;
    public function __construct() {}
};

Например, что если в подменяемом классе изменится состав полей?

С тем же успехом в blade шаблоне может измениться список используемых методов. Если есть уверенность что "точно нет", то лучше переопределить эти методы в анонимном классе, а не тащить рефлексию туда, где она не нужна.

А зачем, если анонимный класс можно сделать таким ?

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

С тем же успехом в blade шаблоне может измениться список используемых методов. Если есть уверенность что "точно нет", то лучше переопределить эти методы в анонимном классе, а не тащить рефлексию туда, где она не нужна.

Изменение списка используемых методов не повлияет на работу тестового двойника, он же их наследует. Может измениться набор полей, но его легко отредактировать в сервисе-клиенте и всё, больше нигде его менять не надо, ничего не надо редактировать в коде «того микросервиса». А рефлексия в данном случае помогает решить возможную проблему с приватными полями в классе-родителе.

А так, снова согласен, сам люблю минимализм, и с удовольствием обошёлся бы анонимным классом.

Может измениться набор полей, но его легко отредактировать

Я имел ввиду, что методы так же можно легко отредактировать. Более того, можно в конструктор сразу передать ваш $request (ну или только поля из него) и в методах данные брать напрямую из него. Тогда и поля не надо переопределять.

А вообще сюда прям просится DataForBladeTemplateInterface с необходимыми для шаблона методами 😉

Я понял вашу идею. Если получится, то на выходных дополню статью сводной таблицей по результатами нашего небольшого обсуждения.

Сделано.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации