Google Testing on the Toilet: фейки и моки

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

Надежность или достоверность (fidelity) теста означает, насколько поведение теста похоже на поведение production-кода. Тест с более высокой надежностью дает больше уверенности, что тестируемый код будет работать правильно.

Указывая зависимость для использования в тесте, отдавайте предпочтение варианту с наивысшей возможной надежностью. Более подробная информация содержится в главе Test Doubles книги Software Engineering at Google.

  1. Старайтесь использовать реальную имплементацию. Это обеспечит наибольшую достоверность, поскольку в тесте будет выполняться код из имплементации. При использовании реальной имплементации возможны компромиссы: она может быть медленной, не очень детерминированной или сложной для инстанцирования (например, подключается к внешнему серверу). Решайте сами, применима ли реальная имплементация в каждом случае.
  2. Используйте фейк, если не можете использовать реальную имплементацию. Фейк — облегченная имплементация API, которая ведет себя аналогично реальной, например, in-memory база данных. Фейк обеспечивает высокую надежность тестирования, но требует некоторых усилий для написания и поддержки; например, его тоже нужно протестировать, чтобы убедиться, что его поведение соответствует поведению реальной имплементации. Поэтому, как правило, владелец реальной имплементации создает и поддерживает ее фейк.
  3. Используйте мок, если не можете использовать реальную имплементацию или фейк. Мок снижает надежность теста, поскольку он не выполняет имплементацию зависимости; его поведение задается в тесте (техника, известная как stubbing), поэтому это поведение может отличаться от поведения реальной имплементации. Моки обеспечивают базовый уровень уверенности в том, что тестируемый код работает правильно, и особенно полезны при тестировании пути в кода, который трудно вызвать (например, условие ошибки по таймауту).

(Примечание: Хотя «моки» — это объекты, созданные с помощью таких фреймворков, как Mockito или unittest.mock, те же проблемы возникнут, если вы вручную создадите собственную имплементацию в тесте).

Тест с низкой степенью надежности: Зависимости заменяются моками. Старайтесь избегать этого.Тест с высокой надежностью: Зависимости используют реальные имплементации или фейки. Предпочитаемый вариант.
@Mock OrderValidator validator;
@Mock PaymentProcessor processor;


ShoppingCart cart =
new ShoppingCart(
validatorprocessor);

OrderValidator validator =
createValidator();
PaymentProcessor processor =
new FakeProcessor();


ShoppingCart cart =
    new ShoppingCart(
validatorprocessor);

Стремитесь к такой надежности, которой можно достичь, не увеличивая объем теста. В Google тесты классифицируются по размеру. Большинство тестов должны быть небольшими: они должны выполняться в рамках одного процесса и не должны ожидать ответа системы или событие за пределами своего процесса. Увеличение надежности небольшого теста часто является хорошим вариантом, если тест остается в рамках этих ограничений. Хороший тестовый набор у нас также включает средние и большие тесты c высокой надежностью — поскольку там могут быть «тяжелые» зависимости, которые нецелесообразно использовать в маленьких тестах; например, зависимости, увеличивающие время выполнения или вызывающие другие процессы.

Источник


Моки, стабы, пустышки, шпионы и фейки — полный гайд

Моки и стабы — краткий гайд


Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас