В чем разница между насмешками и окурками на носорогах насмешек?



Я не играл достаточно с этим и обычно использую насмешки, но мне интересно, в чем разница между этими двумя и когда использовать один или другой на носорог издевается.



обновление:



Я также нашел ответ на мой вопрос Ayende это:



разница между окурками и насмешками


Вы можете получить фактическое определение этих терминов в этой статье: насмешки не окурки. Я хочу сосредоточьтесь на разнице с точки зрения носорога издевается.



макет-это объект, на который мы можем установить ожидания, и который будет проверять, что ожидаемые действия действительно произошли. Заглушка-это объект, который используется для передачи тестируемому коду. Вы можете настроить на него ожидания, чтобы он действовал определенным образом, но эти ожидания никогда не будут проверены. Свойства заглушки будут автоматически вести себя как обычные свойства, и вы не можете установить ожидания их.



Если вы хотите проверить поведение тестируемого кода, Вы будете использовать макет с соответствующим расчетом, и убедитесь, что. Если вы хотите просто передать значение, которое может потребоваться действовать определенным образом, но не является фокусом этого теста, вы будете использовать заглушку.



важно: заглушка никогда не приведет к провалу теста.

360   5  

5 ответов:

по состоянию на этой

... Проще говоря есть разница между макетом и заглушкой объектов и RhinoMocks признает, что позволяет нам писать тесты, которые лучше укажите их цель.

макетные объекты используются для определения ожиданий, т. е.: в этом сценарии I ожидайте, что метод A() будет вызван с такими-то и такими-то параметрами. Издевается запишите и проверьте такие ожидания.

заглушки, с другой стороны, имеют другой цель: они не записывают или проверить ожидания, а скорее позволить нам "заменить" поведение, состояние "поддельного" объекта для использования тестового сценария ...

вообще говоря, модульные тесты вызывают функции и методы, а затем проверяют, произошло ли ожидаемое поведение. Для этих функций и методов могут потребоваться параметры. Мы используем заглушки и насмешки, чтобы удовлетворить этим параметрам. Иногда мы можем также издеваться над глобальными объектами.

заглушки

заглушка-это крошечный поддельный объект, который ваш тест может использовать в качестве параметра для работы вызова функции. Это позволяет нам проверить поведение тестируемой функции. Не давайте проверьте все побочные эффекты, потому что заглушка не имеет реализации.

глумится

макет-это заглушка с реализацией. Если наша тестируемая функция взаимодействует с нашим макетом объекта, мы можем проверить, что макет взаимодействовал с тем, как мы ожидали.

например, скажем, у нас был макет объекта пользователя, и мы хотели убедиться, что наши сессии.метод входа работал, мы могли бы проверить этого пользователя.последний был установлен. Мы могли бы создать макет пользователя, который реализует этот метод. Когда мы вызываем сессию.логин, мы можем утверждать, что пользователь.у lastLoggedIn есть состояние, которое мы ожидали.

подведем итоги

макет-это заглушка с реализацией, которая позволяет нам тестировать побочные эффекты.

эта разница все еще важна?

скорее, как разница между сравнениями и метафорами, разница между пнями и насмешками тонкая и историческая, и, возможно, имеет больше общего с различными сообществами и философиями в мире. мир испытания чем любая главная техническая разница.

Они представляют несколько разные подходы к тестированию. Макет может быть написан как заглушка. Заглушка обычно может быть расширена в макет.

что вы должны использовать?

вы можете обнаружить, что вы начинаете создавать заглушки, а затем вы можете обнаружить, что вам нужно создать полный на издевки для некоторых из ваших объектов. Вы можете издеваться над всем, как вы идете, или вы можете просто хотеть издеваться там, где это необходимо.

разница между макетом и заглушкой: с заглушкой вы исправляете ввод своего модульного теста: поэтому ваш модульный тест не делает утверждение на заглушке и заглушка путем переписывания реализации какого-то метода фиксирует поведение поддельного объекта. с помощью Mock вы исправляете выход вашего модульного теста: поэтому ваш модульный тест делает ожидание на вашем издевательском объекте, проверяя внутреннее взаимодействие в вашем макете объекта.

в случае Moq framework-setup метод заглушки, где в качестве метода проверки является Mock

одна вещь, которую я тоже заметил, это то, что когда я использую MockRepository.GenerateMock, мне нужно явно установить ожидания на конкретный вызов метода, чтобы перехватить этот вызов. С заглушками, кажется, автоматически перехватывать любой метод, пока он является виртуальным.

Comments

    Ничего не найдено.