Обзор терминологии модульного тестирования (тупик против макета, интеграция против взаимодействия)? - PullRequest
33 голосов
/ 02 декабря 2009

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

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

Ответы [ 5 ]

49 голосов
/ 02 декабря 2009

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

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

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

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

12 голосов
/ 06 января 2012

Эта статья от MSN Magazine объясняет термины и дает некоторые подробности с примерами и некоторым исходным кодом.

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

  • Пустышка - Пустышки не содержат реализации
  • Заглушка - заглушки - это минимальные реализации интерфейсов или базовых классов
  • Шпион - шпион будет записывать, какие участники были вызваны
  • Подделка - более сложная, подделка может напоминать производственную реализацию
  • Макет - Макет обычно динамически создается фиктивной библиотекой, и в зависимости от его конфигурации макет может вести себя как манекен, пень или шпион
6 голосов
/ 02 декабря 2009

Фаулер, конечно, проделал большую работу по дифференцированию Моксов и Окурков , но для меня книга XUnit Test Patterns является справочной, и я бы предложил проверить Насмешки, подделки, заглушки и манекены для всестороннего сравнения.

Да, я знаю, это сбивает с толку, и поэтому я бы посоветовал проверить Насмешки и пни не шпионы , затем давайте шпионим и наконец Мокито Новый Mock Framework на блоке тоже.

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

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

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

4 голосов
/ 02 декабря 2009

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

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

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

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

State Test - проверка результатов, полученных в результате операции

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

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

Макет - подставка, используемая для проверки результатов теста

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

4 голосов
/ 02 декабря 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...