Выбор ответа Senior Тестирование: JUnit 5 и Mockito обновлено

Стаб у spy

Вопрос

Почему для spy пишут doReturn(x).when(spy).load(), а не when(spy.load()).thenReturn(x)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Во втором варианте сначала вызовется настоящий load(). spy.load() внутри when(...) это реальный вызов: spy по умолчанию делегирует настоящему объекту.

Варианты ответа

  1. Во втором варианте сначала вызовется настоящий load()правильный ответ
  2. Второй вариант не компилируется для spy, только для mock
  3. doReturn работает быстрее и не создаёт лишних прокси
  4. when не поддерживает методы без аргументов у spy

Разбор

spy.load() внутри when(...) это реальный вызов: spy по умолчанию делегирует настоящему объекту. Если метод ходит в сеть или бросает исключение, тест сломается ещё на стабе. doReturn настраивает ответ, не вызывая метод. Компилируются оба варианта, скорость не важна, методы без аргументов when поддерживает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме