В этом посте мы рассматривали паттерн
Object Mother. Там я обещал, что расскажу об альтернативном паттерне, который требует больше усилий, но имеет меньше проблем на выходе — Test data builder.Как уже было сказано ранее, если тестируемый объект может иметь много разных состояний, то Object Mother сильно раздувается, код внутри методов фабрики будет повторяться, что выглядит не сильно лаконично. Здесь на помощь нам приходит builder. Не используя паттерн у нас получится примерно такой код.
❗️Вроде ничего страшного, но для сравнения код с использованием builder'a.
💡 Код более краток, читабелен и чёток относительно целей теста. Также они носят хороший описательный характер, например если бы мы добавили
AddressBuilder, то вместо магического числа 21, которое передается в конструктор, написали бы метод ->withHouseNumber(21).Сам подход более гибкий, помогает избежать копипасты, которой в тестах обычно и так хватает. Вы также можете комбинировать оба паттерна (включая
Object Mother) там, где это уместно, таким образом балансируя между гибкостью и количеством затраченного времени.#PHP #testing #junior #source