Что такое заглушки (test doubles) в тестировании?

«Что такое заглушки (test doubles) в тестировании?» — вопрос из категории Автоматизация тестирования, который задают на 22% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Заглушки (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');
});

Преимущества: ускорение тестов, устранение нестабильности из-за внешних систем, фокусировка на тестировании конкретной логики.