Издевается и заглушки - PullRequest
       10

Издевается и заглушки

29 голосов
/ 02 марта 2011

Я действительно не понимаю, что такое издевательства и заглушки.Я хочу знать, когда, почему и как мы используем Mocks в наших тестовых случаях.Я знаю, что в Ruby on Rails есть хорошие фреймворки для Mocks и Stubs, но, не зная цели, я неохотно использую их в своем приложении.

Не могли бы вы уточнить про Mocks и Stubs?Пожалуйста помоги.

Ответы [ 3 ]

64 голосов
/ 02 марта 2011

Мой очень упрощенный ответ:

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

С обоими мы пытаемся достичь одного и того же: мы хотим протестировать определенный модуль (модель / вид / контроллер / модуль) изолированно. Например. когда мы тестируем контроллер, мы не хотим тестировать нашу модель, поэтому мы используем макет. Мы хотим убедиться, что вызываются правильные методы, например, find. Таким образом, в нашем макете у нас есть заглушка, которая будет возвращать что-то предопределенное, без фактического перехода в базу данных.

Итак, мы проверяем ожидания: методы, которые мы ожидаем вызвать (в других единицах), фактически не вызывая их. Испытание этого конкретного метода должно было быть рассмотрено в его собственном испытании.

15 голосов
/ 08 января 2013

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

Насмешка более конкретная и связанная с объектом: если переданы определенные параметры, то объект возвращает определенные результаты. Поведение объекта имитируется или «высмеивается».

Stubbing является более общим и связанным с методом: метод-заглушка обычно возвращает один и тот же результат для всех параметров. Поведение метода заморожено, консервировано или «заглушено».

2 голосов
/ 02 марта 2011

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

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

...