Обзор терминологии единичного тестирования (заглушка против макета, интеграция и взаимодействие)?
Я использую больше модульных тестов в своих проектах и читаю всю информацию, которую я могу сделать в Интернете, и меня путают многие термины. В результате я, вероятно, неправильно использую эти условия в разговорах и поиске в 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 - новая макетная структура на блоке.
Что касается различных типов тестов, может быть упрощенное объяснение (это не исчерпывающий список):
- модульное тестирование: тестирование одного "блока", метод, изолированный
- интеграционное тестирование: тестирование интеграции нескольких блоков (методы, классы, компоненты, слои)
- функциональное тестирование: тестирование сквозного сценария (с точки зрения пользователя)
Все эти типы полезны и не эксклюзивны, они фактически не имеют одинаковых намерений.
Ответ 4
это отличная книга: http://xunitpatterns.com/
см. http://xunitpatterns.com/Mocks,%20Fakes,%20Stubs%20and%20Dummies.html
и http://xunitpatterns.com/XUnit%20Terminology%20Crossreference.html
Ответ 5
Я прочитал (и от души рекомендую) Искусство тестирования единиц Роем Ошеровым. Он использует упрощенный набор терминов.
Перефразируя его книгу...
Тест интеграции - любой тест, который выходит за пределы текущего процесса или объекта для взаимодействия с чем-то другим
Тест взаимодействия - тест на то, как объекты работают вместе
Тест состояния - тест результатов, полученных в результате операции
Fake - любой объект в режиме ожидания, который используется вместо реальной вещи
Stub - объект ожидания, который обеспечивает зависимость, требуемую тестируемым кодом
Mock - режим ожидания, используемый для проверки результатов теста
Обратите внимание, что здесь и Stub, и Mocks могут быть предоставлены с помощью фреймворка Mocking. Распределение также связано с тем, как они используются в качестве используемой технологии.