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-вызов).