Что не так с заглушками для модульного тестирования?

StackOverflow https://stackoverflow.com/questions/1522846

Вопрос

Я только что смотрел это смешно Видео на YouTube о модульном тестировании (Это Гитлер с фальшивыми субтитрами, разжевывающими его команду за то, что он не выполнял хорошие модульные тесты-напрокайте ее, если вы нарушаете юмор), где заглушки подвергаются резкой критике. Но я не понимаю, что не так с заглушками.

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

Я буду в мире, когда -то больно, в будущем, выбрав рукописные заглушки и подделки вместо насмешек (например, Rhinomock и т. Д.)? (Используя таксономию Фаулера)

Каковы соображения для выбора между макетом и рукописной заглушкой?

Это было полезно?

Решение

Нет ничего плохого в заглушках, есть место для заглушек, насмешек ... и шпионов. Все это «тестовые удвоения», но с разными целями, как объяснено в Измешивания и заглушки - это не шпионы:

...] Прежде чем двигаться дальше, я хотел бы уточнить и определить некоторые термины, используемые здесь, которые я изначально обнаружил в Джерарде Месзарос. Книга XUNIT Patterns.

  • Фиктивный объект - это объект -заполнитель, переданный в тестируемую систему, но никогда не использовался.
  • Тестовая заглушка обеспечивает тестовую систему с косвенным входом
  • Испытательный шпион предоставляет способ убедиться, что тестовая система выполняла правильный косвенное вывод
  • Макс -объект обеспечивает тестовую систему как с косвенным входом, так и способом проверки косвенного выхода

...] И вы можете позволить этой удобной диаграмме направлять ваши решения:

alt text

PS: Mockito - новый макет на блоке Стоит прочитать тоже.

Другие советы

Я использую следующую терминологию (представленная Роем Осероувом, автором «Искусство проверки единицы»):

А фальшивый называется а заглушка Если вы скажете ему что -то подделать в случае, если метод вызван с такими и такими параметрами. Но если вы также подтвердите, что такой вызов фактически имел место или имел место ровно n раз, то такая подделка называется насмехаться. Анкет Короче говоря. Подделка - это заглушка, если вы не вызовите Verify () на нем, а затем это макет.

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

Если вы не начали использовать смешную структуру (альтернативный термин: Изоляционная структура), вы должны следить за ними и часто переоценивать ваши варианты. Я очень быстро перешел от ручных марок в NMOCK2 в MOQ. Вот интересный опрос программистов, которые показывают то, что они используют. Ручные издевательства/заглушки находятся в меньшинстве, но не так редко.

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

Есть много небольших соображений, таких как: если вы не хотите иметь дело с какими-либо методами, вы можете либо, чтобы он выступил в качестве неоперационного или провального теста-ваш выбор-но в любом случае практически нет кода Анкет

Сколько шаблон вы получаете, когда загрязняете класс? Как вы справляетесь с этим, если ваш класс является окончательным? Вы играете в трюки, чтобы сначала получить свою заглушку на пути к классу, или вы используете другой источник?

Я рекомендую только начать с макетов-это легче вокруг.

Нет ничего плохого в использовании заглушек вместо насмешек.

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

Но многие люди (включая меня) предпочитают проходить государственное тестирование с заглушками, а не тестирование поведения с макетами. Вы вкладываете заглушку в тестируемый класс, вы вызываете метод, затем проверяете состояние тестирования класса. Это имеет тенденцию проводить менее хрупкие тесты, чем утверждение, что внутренние класса называют метод X макетного объекта с аргументом Y.

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

Если у вас много интерфейсов, или если у ваших интерфейсов есть много методов, структура изоляции/насмешки может сэкономить много времени на загрязнениях рук.

Мне нравится Могил много; Я нахожу проще в использовании, чем издевательства над носорогом для создания заглушек.

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

Я сейчас использую Могил для насмешки и загрязнения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top