$observer = $this->createMock(Observer::class);
$observer->expects($this->once())
->method('abstractMethod')
->will($this->returnValue('wow'));
Главное различие между stubs и mocks заключается в том, что в одном случае мы управляем состоянием, а в другом - поведением.
Когда мы используем mocks, мы заменяем весь модуль на mock (ложный, тестовый объект, имитирующий настоящий). А stub - это функция, которая всегда выводит один и тот же результат, вне зависимости от того, что было подано на вход. Mocks используют для того, чтобы проверить, была ли функция вызвана с правильными аргументами, а stubs, чтобы протестировать, как функция работает с полученным ответом. Стабы нужны для проверки состояния метода, а моки используются для регулировки поведения.