Mock (Мок): Поддельный объект, который проверяет, что тестируемый код взаимодействует с ним ожидаемым образом (вызывает определенные методы, с определенными аргументами и в нужном порядке). Моки проверяют поведение.
Stub (Стаб): Поддельный объект, который предоставляет заранее заданные ответы на вызовы методов. Стабы используются для управления состоянием зависимостей и фокусируются на тестируемом объекте, а не на взаимодействии с зависимостями. Стабы проверяют состояние.
Spy (Шпион): Частично поддельный объект, который оборачивает реальный объект. Он позволяет отслеживать вызовы его методов (аргументы, количество вызовов и т.д.), при этом реальный метод может быть вызван. Шпионы хороши для проверки того, что реальный объект был использован, и при этом позволяют проверить его поведение.