Ответ
Заглушки (Test Doubles) — это объекты-заменители, которые используются в модульных и интеграционных тестах для изоляции тестируемого кода от его реальных зависимостей (баз данных, внешних API, сложных сервисов).
Основные типы и их назначение:
| Тип | Назначение | Пример использования |
|---|---|---|
| Stub (Заглушка) | Предоставляет тесту заранее заданные ответы. | Заменить API погоды, чтобы всегда возвращать "ясно". |
| Mock (Мок) | Проверяет, как тестируемый код взаимодействует с зависимостью (вызовы методов, аргументы). | Убедиться, что метод отправки email был вызван ровно один раз. |
| Fake (Фейк) | Упрощенная, но рабочая реализация зависимости. | In-memory база данных для тестов вместо реальной PostgreSQL. |
| Spy (Шпион) | Пассивно записывает взаимодействия для последующей проверки. | Записать все переданные аргументы в метод логирования. |
Пример Mock на JavaScript (Jest):
// Мок для модуля, отправляющего email
const emailService = {
sendWelcomeEmail: jest.fn() // Создаем mock-функцию
};
// В тесте
it('should send a welcome email on user registration', () => {
registerUser('test@example.com'); // Внутри этой функции вызывается emailService.sendWelcomeEmail
// Проверяем взаимодействие (поведенческая проверка)
expect(emailService.sendWelcomeEmail).toHaveBeenCalledTimes(1);
expect(emailService.sendWelcomeEmail).toHaveBeenCalledWith('test@example.com');
});
Преимущества: ускорение тестов, устранение нестабильности из-за внешних систем, фокусировка на тестировании конкретной логики.