Чем mock отличается от stub?

Ответ

Stub - предоставляет заранее определенные ответы. Не проверяет вызовы. Тест проверяет состояние.

Mock - проверяет, что определенные методы были вызваны с правильными аргументами. Тест проверяет поведение.

// Stub - проверяем результат (state verification)
$repo = $this->createStub(UserRepo::class);
$repo->method('find')->willReturn($user);
$result = $service->getProfile(1);
$this->assertEquals('John', $result->name); // проверяем состояние

// Mock - проверяем взаимодействие (behavior verification)
$mailer = $this->createMock(Mailer::class);
$mailer->expects($this->once())->method('send'); // проверяем вызов
$service->register($user);

Предпочитайте stubs - тесты менее хрупкие при рефакторинге.

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