Когда использовать mock, а когда fake?

Ответ

Mock - когда нужно проверить взаимодействие (вызван ли метод, с какими аргументами):

$notifier->expects($this->once())->method('notify');

Fake - когда нужна рабочая реализация без внешних зависимостей:

class InMemoryUserRepository implements UserRepository {
    private array $users = [];
    public function save(User $user): void {
        $this->users[$user->id] = $user;
    }
    public function find(int $id): ?User {
        return $this->users[$id] ?? null;
    }
}

Fakes предпочтительнее для репозиториев, кешей, очередей - тесты проверяют бизнес-логику, а не конкретные вызовы. Mocks - для side effects (отправка email, API-вызов).

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.