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

Тестовые шпионы полезны для проверки как обратных вызовов, так и того, как определенные функции/методы используются в тестируемой системе.

Что такое заглушки?

Тестовые заглушки — это функции (шпионы) с заранее запрограммированным поведением. Они поддерживают полный тестовый шпионский API в дополнение к методам, которые можно использовать для изменения поведения заглушки.

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

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

Что такое мокапы?

Моки (и ложные ожидания) — это поддельные методы (например, шпионы) с заранее запрограммированным поведением (например, заглушки), а также заранее запрограммированные ожидания. Макет провалит ваш тест, если он не используется должным образом.

Моки следует использовать только для тестируемого метода. В каждом модульном тесте должен быть один тестируемый модуль. Если вы хотите контролировать, как используется ваше устройство, и вам нравится заявлять ожидания заранее (в отличие от утверждений постфактум), используйте макет.

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

Ссылки: