Обзор терминологии единичного тестирования (заглушка против макета, интеграция и взаимодействие)?

Я использую больше модульных тестов в своих проектах и ​​читаю всю информацию, которую я могу сделать в Интернете, и меня путают многие термины. В результате я, вероятно, неправильно использую эти условия в разговорах и поиске в Google.

Может ли кто-нибудь изложить все термины модульного тестирования, такие как "поддельные" типы, а также типы тестов (взаимодействие или интеграция)?

Ответ 1

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

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

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

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

Ответ 2

Этот статья из журнала MSN объясняет термины и подробно описывает примеры и некоторый исходный код.

В основном это тестовые двойники:

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

Ответ 3

Фаулер, конечно же, отлично работал над дифференцированием Mocks and Stubs, но для меня XUnit Test Patterns книга является ссылкой, и я бы предложил проверить Mocks, Fakes, Stubs and Dummies для всестороннее сравнение.

Да, я знаю, это сбивает с толку, и поэтому я предлагаю проверить Mocks and Stubs не являются шпионами, затем позволяет шпионить и, наконец, Mockito - новая макетная структура на блоке.

Что касается различных типов тестов, может быть упрощенное объяснение (это не исчерпывающий список):

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

Все эти типы полезны и не эксклюзивны, они фактически не имеют одинаковых намерений.

Ответ 5

Я прочитал (и от души рекомендую) Искусство тестирования единиц Роем Ошеровым. Он использует упрощенный набор терминов.

Перефразируя его книгу...

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

Тест взаимодействия - тест на то, как объекты работают вместе

Тест состояния - тест результатов, полученных в результате операции

Fake - любой объект в режиме ожидания, который используется вместо реальной вещи

Stub - объект ожидания, который обеспечивает зависимость, требуемую тестируемым кодом

Mock - режим ожидания, используемый для проверки результатов теста

Обратите внимание, что здесь и Stub, и Mocks могут быть предоставлены с помощью фреймворка Mocking. Распределение также связано с тем, как они используются в качестве используемой технологии.