запомни одно простое правило - если тесты писать неудобно - значит ты чет не то тестишь или тестируемый код кривой. Код вида
public function doStuff(int $id)
{
$data = $this->oneDependency->hahaha($id);
$anotherResult = $this->twoDependencies->ahahah($data);
return $this->threeDependencies->ahahah($anotherResult)
}
такое нет смысла покрывать юнитами. Это тупая координация действий и простой приемочный тест с этим справится лучше.
Необходимость покрывать юнитами тестами тут может возникнуть когда у тебя часть логики вытекает в этот "контроллер" (GRASP controller паттерн). Мол он и координирует действия и трансформирует данные например как-то или выбирает кто следующий должен на основе предыдущего результата. Тут конечно лучше попытаться добавить еще зависимость которая эту логику от нас спрячет.
То есть по сути мы убираем ограничения на количество зависимостей для такого кода. В любом случае один позитивный тест кейс затронет все строчки, нет ветвлений. нет преобразований данных. Потому стратегия простая:
- много логики - избавляемся от зависимостей настолько насколько это возможно.
- много зависимостей - избавляемся от логики настолько насколько это возможно.