28/08/2022

Изоляция компонентов

Изоляция компонентов

При выполнении теста с полным флоу можно встретить несколько проблем:

  • в интернет-магазине иногда нужно будет совершить оплату, чтобы закончить тест
  • задействовать реальную сервисную службу (чтобы собрать заказ)
  • зарезервировать ресурсы
  • долгая обратная связь тк нужно выполнить весь набор действий

Решением этих проблем может стать идея тестирования приложения по частям.

Модульные(unit) тесты

  • Как правило тесты на функции или методы классов.
  • Для этих тестов не нужна сборка приложения.
  • Высокая скорость исполнения.

Среди unit тестов выделяют:

  • Sociable - тесты, которые используют реальные модули приложения;
  • Solitary - тесты, которые используют подставные объекты или тестовые дублеры.

Тестовые дублеры

Dummy

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

Fake

Может иметь реальную реализацию, но не может использоваться в продакшене. Например, использование In Memory DataBase вместо ORM(Object-Relational Mapping), которую скорее всего не получится использовать в продакшене.

Stub

Всегда возвращает статичный ответ по заданному запросу. Если нужно протестировать взаимодействие с внешним API, которое может быть недоступно, то его можно заменить stub'ом.

Spy

Похоже на stub, но еще может следить за вашим приложением. Например, вы тестируете функцию в результате, которой происходит отправка письма пользователю, но в тестах не нужно рассылать настоящие письма, поэтому в функцию можно встроить "шпиона", который будет следить был ли вызвов отправки письма пользователю или нет, но при этом сам он отправлять письмо не будет. Такие тесты больше на поведение, чем на состояние.

Mock

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