Какая разница между подделкой, издевательством и окурком?

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

Вот как я их использую:

Поддельный : класс, который реализует интерфейс, но содержит фиксированные данные и никакой логики. Просто возвращает «хорошие» или «плохие» данные в зависимости от реализации.

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

Заглушка : Как и фиктивный класс, за исключением того, что он не обеспечивает возможность проверки того, что методы были вызваны / не вызваны.

Макеты и заглушки могут быть сгенерированы вручную или сгенерированы фреймворком. Поддельные классы создаются вручную. Я использую mocks прежде всего для проверки взаимодействия между моим классом и зависимыми классами. Я использую заглушки, как только проверил взаимодействия и проверяю альтернативные пути в своем коде. Я использую поддельные классы в первую очередь для абстрагирования зависимостей от данных или когда макеты / заглушки слишком утомительны для настройки каждый раз.

вопрос задан 6.12.2008
tvanfosson
416703 репутация

7 ответов


  • 430 рейтинг

    Вы можете получить некоторую информацию:

    от Мартина Фаулера о Макете и Окурке

    Поддельные объекты на самом деле имеют рабочие реализации, но обычно используют некоторые ярлыки, которые делают их непригодными для производства

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

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

    От xunitpattern :

    Подделка : Мы приобретаем или создаем очень легкую реализацию той же функциональности, которая предоставляется компонентом, от которого зависит SUT, и поручаем SUT использовать его вместо реального.

    Заглушка : эта реализация настроена на ответ на вызовы из SUT со значениями (или исключениями), которые будут использовать непроверенный код (см. «Производственные ошибки» на странице X) в SUT. Ключевая индикация для использования тестовой заглушки - наличие непроверенного кода, вызванного невозможностью контролировать косвенные входы SUT

    Макет объекта , который реализует тот же интерфейс, что и объект, от которого зависит SUT (тестируемая система). Мы можем использовать фиктивный объект в качестве точки наблюдения, когда нам нужно выполнить проверку поведения, чтобы избежать наличия непроверенного требования (см. «Производственные ошибки» на странице X), вызванного неспособностью наблюдать побочные эффекты от вызова методов на SUT.

    Лично

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

    ответ дан Patrick Desjardins, с репутацией 85264, 6.12.2008
  • 162 рейтинг

    Заглушка - объект, который предоставляет предопределенные ответы на вызовы методов.

    Макет - объект, на который вы устанавливаете ожидания.

    Подделка - объект с ограниченными возможностями (для целей тестирования), e. г. поддельный веб-сервис.

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

    ответ дан Mike, с репутацией 2878, 3.03.2011
  • 5 рейтинг

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

    ответ дан Steve Freeman, с репутацией 2495, 21.05.2009