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 - тесты менее хрупкие при рефакторинге.