В чём разница между Mock и Spy в Mockito на собеседовании?

В чём разница между Mock и Spy в Mockito? Mockito — фреймворк для тестирования с использованием имитаций Mock — полностью искусственный объект, поведение всех его методов можно настроить Spy — объект на основе…

Короткий ответ

Что ответить на собеседовании

В чём разница между Mock и Spy в Mockito? Mockito — фреймворк для тестирования с использованием имитаций Mock — полностью искусственный объект, поведение всех его методов можно настроить Spy — объект на основе реального экземпляра, в котором можно переопределять отдельные методы В отличие от Mock, Spy по умолчанию выполняет настоящие методы объекта С помощью Spy можно проверять поведение реального объекта и одновременно контролировать его вызовы Mock подходит для полной изоляции зависимостей, а Spy — для частичного управления реальным объектом На практике Mock выбирают для полного контроля, а Spy — для тестов, где требуется сочетать…

Подробный разбор

Ответ с пояснениями

В чём разница между Mock и Spy в Mockito?

  • Mockito — фреймворк для тестирования с использованием имитаций
  • Mock — полностью искусственный объект, поведение всех его методов можно настроить
  • Spy — объект на основе реального экземпляра, в котором можно переопределять отдельные методы
  • В отличие от Mock, Spy по умолчанию выполняет настоящие методы объекта
  • С помощью Spy можно проверять поведение реального объекта и одновременно контролировать его вызовы
  • Mock подходит для полной изоляции зависимостей, а Spy — для частичного управления реальным объектом
  • На практике Mock выбирают для полного контроля, а Spy — для тестов, где требуется сочетать реальные данные и подменённое поведение

Подробный ответ

Основной ответ

В Mockito есть два распространённых типа тестовых двойников — mock и spy. Они применяются в юнит-тестах для разных задач. Mock представляет собой полностью искусственный объект: его методы по умолчанию ничего не делают, поэтому нужное поведение необходимо задавать вручную. Spy, напротив, создаётся поверх реального объекта и вызывает его настоящие методы, если для конкретного метода не была задана замена.

Ключевые моменты

  • Mock: полностью имитирует исходный объект. Пока тестировщик не определит поведение через when(...).thenReturn(...), вызовы его методов возвращают стандартные значения — null, 0 или false. Такой вариант используют, когда зависимость требуется полностью контролировать и не подключать её настоящую реализацию.
  • Spy: работает как обёртка над реальным объектом и по умолчанию передаёт вызовы настоящим методам. Одновременно тест может перехватывать отдельные вызовы и задавать для выбранных методов другое поведение. Это позволяет проверять взаимодействие с объектом, сохраняя остальную логику его оригинальной реализации.
  • Trade-off: Mock лучше изолирует тестируемый код и обычно проще в настройке, однако его поведение может быть менее реалистичным. Spy предоставляет больше гибкости, но способен сделать тест хрупким, если реальные методы обладают побочными эффектами или зависят от внешних компонентов.

Практический контекст

В прикладных проектах, включая Spring Boot с Mockito 4+, mock часто применяют для репозиториев и сервисов, чтобы полностью отделить тест от их реализации. spy используют, когда в сложном объекте нужно заменить только часть поведения, сохранив остальную логику и реальные side-effects. При этом важно поддерживать чистоту юнит-теста и не создавать чрезмерно глубокие шпионы для сложных объектов.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку