stop — это техника изоляции теста от прямых зависимостей (например, обращений к сторонним API, базам данных) путем замены реальных объектов на тестовые заглушки. Он используется для контроля поведения внешних зависимостей и обеспечения воспроизводимости тестов.
mock (производное от "mock object") — это разновидность тестовой заглушки, которая не только заменяет реальный объект, но и позволяет проверять, как с ним взаимодействует тестируемый код. С помощью моков можно утверждать (assert) о вызовах методов, их аргументах и количестве вызовов.
Таким образом, stop - более общее понятие, описывающее изоляцию, а mock - конкретный инструмент для ее достижения, добавляющий возможность верификации взаимодействия.
Пример с использованием PHPUnit и Mockery:
php
В этом примере ApiClient заменяется "моком". Мы "заглушили" реальный вызов API и одновременно настроили мок на возврат определенных данных при вызове fetchUserData(123). Также мы верифицируем, что этот метод был вызван с правильными аргументами и один раз. Это и есть ключевое отличие: мок позволяет проверять взаимодействие.