Кстати, еще вариант. Если у вас в классе есть метод, который использует статику или, допустим, должен обращаться к файловой системе, что вам не хочется делать в тестах, можно явно вынести эту функциональность в отдельный приватный метод и его уже замокать. Получится что-то вроде
class Actor
{
public function generateFolders()
{
$folders = str_split($this->hash, self::FOLDER_TITLE_LENGTH);
$folders = array_slice($folders, 0, $this->foldersDepth);
$folders = implode('/', $folders) .
($this->accessDir ? '/' . $this->accessDir : '');
$path = self::getPathToFiles() . '/' . $folders;
$this->createDirectory($path);
return $folders;
}
protected function createDirectory($path)
{
return FileHelper::createDirectory($path);
}
}
В этом коде уже довольно легко замокать явное обращение к статическому методу. Остальные методы при этом будут работать как обычно.
$actor = $this->getMock('Actor', ['createDirectory']);
$actor->expects($this->any())->method('createDirectory')->willReturn(true);
Это проще чем реализовывать полноценный DI с подменой реализации интерфейсов.