Я не играл с этим достаточно и обычно использую макеты, но мне интересно, в чем разница между этими двумя и когда использовать один или другой на Rhino Mocks.
Обновить:
Я также нашел ответ на свой вопрос в словах Айенде :
Различие между заглушками и имитаторами
Вы можете получить фактическое определение этих терминов в этой статье: Насмешки не являются заглушками . Я хочу сосредоточиться на разнице с точки зрения Rhino Mocks.
Макет - это объект, на который мы можем установить ожидания и который проверит, что ожидаемые действия действительно произошли. Заглушка - это объект, который вы используете для передачи тестируемого кода. Вы можете настроить ожидания, чтобы они действовали определенным образом, но эти ожидания никогда не будут проверены. Свойства заглушки будут автоматически вести себя как обычные свойства, и вы не можете устанавливать на них ожидания.
Если вы хотите проверить поведение тестируемого кода, вы будете использовать макет с соответствующим ожиданием и подтвердите это. Если вы хотите просто передать значение, которое, возможно, должно действовать определенным образом, но не является целью этого теста, вы будете использовать заглушку.
ВАЖНО: заглушка никогда не приведет к сбою теста.
источник
Ответы:
Согласно этому
источник
Вообще говоря, модульные тесты вызывают функции и методы, а затем проверяют, имело ли место ожидаемое поведение. Эти функции и методы могут требовать параметров. Мы используем заглушки и макеты, чтобы удовлетворить эти параметры. Иногда мы можем также высмеивать глобальные объекты.
Столбики
Заглушка - это крошечный поддельный объект, который ваш тест может использовать в качестве параметра, чтобы заставить вызов функции работать. Это позволяет нам проверить поведение тестируемой функции. Это не позволяет нам проверять какие-либо побочные эффекты, потому что заглушка не имеет реализации.
Mocks
Мок это заглушка с реализацией. Если наша тестируемая функция взаимодействует с нашим фиктивным объектом, мы можем убедиться, что с фиктивным взаимодействовали так, как мы ожидали.
Например, скажем, у нас был фиктивный объект User, и мы хотели убедиться, что наш метод session.login работал, мы могли бы проверить, что user.lastLoggedIn был установлен. Мы могли бы создать фиктивного пользователя, который реализует этот метод. Когда мы вызываем session.login, мы можем утверждать, что user.lastLoggedIn имеет ожидаемое состояние.
Подводить итоги
Макет - это заглушка с реализацией, которая позволяет нам тестировать побочные эффекты.
Эта разница все еще важна?
Как различие между сравнениями и метафорами, различие между заглушками и имитациями является тонким и историческим и, возможно, больше связано с различными сообществами и философиями в мире тестирования, чем с какими-либо существенными техническими различиями.
Они представляют несколько разные подходы к тестированию. Макет может быть написан как заглушка. Заглушка обычно может быть превращена в макет.
Что вы должны использовать?
Вы можете обнаружить, что начинаете создавать заглушки, а затем вы можете обнаружить, что вам нужно создать макеты для некоторых ваших объектов. Вы можете издеваться над всем, как вы идете, или вы можете просто издеваться, где это необходимо.
источник
Разница между Mock и заглушкой: с заглушкой вы исправляете ввод вашего модульного теста: таким образом, ваш модульный тест не делает утверждения на заглушке и заглушке, переписывая реализацию некоторого метода, исправляющего поведение поддельного объекта. с помощью Mock вы исправляете выходные данные вашего модульного теста: так что ваш модульный тест рассчитывает на ваш объект Mocking, проверяя внутреннее взаимодействие в вашем объекте Mock.
источник
should have been called with
как утверждениеstub
параметров.В случае Moq framework - метод установки STUB, где Verify метод Mock
источник
Одна вещь, которую я тоже заметил, это то, что когда я использую MockRepository.GenerateMock, мне нужно явно установить ожидания для конкретного вызова метода, чтобы перехватить этот вызов. С заглушками, кажется, автоматически перехватывает любой метод, пока он является виртуальным.
источник