В контексте разработки ПО используются следующие виды тестовых объектов:
Дублер (Test Double): Общий термин для любого вида заменителя реального объекта, используемого в тестах.
Заглушка (Stub): Объект, который возвращает предопределенные значения в ответ на вызовы методов. Используется для управления поведением зависимостей тестируемого объекта.
java
Шпион (Spy): Частичный дублер. Оборачивает реальный объект, перехватывая вызовы методов для проверки, были ли они вызваны, сколько раз и с какими аргументами, но также может вызывать реальные методы.
java
Фальшивка (Fake): Объекты с работающей, но упрощенной реализацией. Например, in-memory база данных вместо реальной.
java
Макет (Mock): Объекты, которые не только имитируют поведение, но и содержат предустановленные ожидания относительно вызовов методов. Должны "знать", как именно их должны вызывать в ходе теста. Если вызовы не соответствуют ожиданиям, тест проваливается.
java
Основное различие между ними заключается в цели использования и уровне сложности имитации:
| Вид | Цель | Поведение | Проверка вызовов |
|---|---|---|---|
| Stub | Предоставить предопределенные ответы | Фиксированные ответы | Нет |
| Spy | Проверить вызовы методов реального объекта | Имитирует часть поведения реального объекта (+ реальные методы) | Да |
| Fake | Упростить зависимость с работающей логикой | Упрощенная, но работающая логика | Обычно нет |
| Mock | Проверить взаимодействие между объектами | Предустановленные ожидания вызовов | Да |