Описание тега mocking

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

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

Причины использования

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

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

Например, программа-будильник, которая заставляет звонок звонить в определенное время, может получать текущее время из внешнего мира. Чтобы проверить это, тест должен дождаться времени будильника, чтобы узнать, правильно ли он прозвенел. Если вместо реального объекта используется фиктивный объект, он может быть запрограммирован на обеспечение времени звонка (независимо от того, действительно ли это время или нет), чтобы программа будильника могла быть протестирована изолированно.

Чаще всего для динамического создания макета используются изоляционные фреймворки, например: