Вообще говоря, модульные тесты вызывают функции и методы, а затем проверяют, имело ли место ожидаемое поведение. Эти функции и методы могут требовать параметров. Мы используем заглушки и макеты, чтобы удовлетворить эти параметры. Иногда мы можем также высмеивать глобальные объекты.
Заглушки
Stub - это крошечный поддельный объект, который ваш тест может использовать в качестве параметра, чтобы заставить вызов функции работать. Это позволяет нам проверить поведение тестируемой функции. Это не позволяет нам проверять какие-либо побочные эффекты, потому что заглушка не имеет реализации.
Mocks
Mock - заглушка с реализацией. Если наша тестируемая функция взаимодействует с нашим фиктивным объектом, мы можем убедиться, что с фиктивным взаимодействовали так, как мы ожидали.
Например, скажем, у нас был фиктивный объект User, и мы хотели проверить, что наш метод session.login работал, мы могли бы проверить, что user.lastLoggedIn был установлен. Мы могли бы создать фиктивного пользователя, который реализует этот метод. Когда мы вызываем session.login, мы можем утверждать, что user.lastLoggedIn имеет ожидаемое состояние.
Подводя итог
Макет - это заглушка с реализацией, которая позволяет нам тестировать побочные эффекты.
Эта разница все еще важна?
Скорее, как разница между сравнениями и метафорами, разница между заглушками и имитациями тонкая и историческая и, возможно, больше связана с различными сообществами и философиями мира тестирования, чем с какими-либо существенными техническими различиями.
Они представляют несколько разные подходы к тестированию. Макет может быть написан как заглушка. Заглушка обычно может быть превращена в макет.
Что вы должны использовать?
Вы можете обнаружить, что начинаете создавать заглушки, а затем вы можете обнаружить, что вам нужно создать макеты для некоторых ваших объектов. Возможно, вы захотите издеваться над всем, как вы идете, или вы можете просто издеваться, где это необходимо.