Ответ
Stub (стаб) — это тип тестового дублёра (test double), который заменяет реальный зависимый компонент и предоставляет заранее заданные, жёстко запрограммированные ответы на вызовы во время теста.
Основная цель: Изолировать тестируемый модуль от его зависимостей, контролируя их поведение и упрощая проверку логики основного модуля.
| Отличие от Mock: | Stub | Mock |
|---|---|---|
| Задаёт состояние (возвращает данные). | Проверяет поведение (ожидает определённые вызовы). | |
| Отвечает на запросы предопределёнными значениями. | Верифицирует, как и сколько раз были вызваны его методы. |
Пример Stub на Java:
// Интерфейс зависимости
public interface PaymentGateway {
boolean processPayment(double amount);
}
// Stub-реализация для теста успешной оплаты
public class SuccessfulPaymentStub implements PaymentGateway {
@Override
public boolean processPayment(double amount) {
// Всегда возвращает успех, игнорируя логику и аргументы
return true;
}
}
// Stub-реализация для теста неудачной оплаты
public class FailingPaymentStub implements PaymentGateway {
@Override
public boolean processPayment(double amount) {
return false; // Всегда возвращает неудачу
}
}
// Использование в тесте
@Test
void testOrderProcessing_Success() {
PaymentGateway stub = new SuccessfulPaymentStub();
OrderService service = new OrderService(stub);
Order order = service.processOrder(new Order(100.0));
assertThat(order.getStatus()).isEqualTo(OrderStatus.CONFIRMED);
}
Стабы полезны для тестирования сценариев, зависящих от внешних сервисов, баз данных или сложных вычислений.