Выбор ответа Senior Тестирование: JUnit 5 и Mockito обновлено
Стаб у spy
Вопрос
Почему для spy пишут doReturn(x).when(spy).load(), а не when(spy.load()).thenReturn(x)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Во втором варианте сначала вызовется настоящий load(). spy.load() внутри when(...) это реальный вызов: spy по умолчанию делегирует настоящему объекту.
Варианты ответа
- Во втором варианте сначала вызовется настоящий
load()правильный ответ - Второй вариант не компилируется для spy, только для mock
doReturnработает быстрее и не создаёт лишних проксиwhenне поддерживает методы без аргументов у spy
Разбор
spy.load() внутри when(...) это реальный вызов: spy по умолчанию делегирует настоящему объекту. Если метод ходит в сеть или бросает исключение, тест сломается ещё на стабе. doReturn настраивает ответ, не вызывая метод. Компилируются оба варианта, скорость не важна, методы без аргументов when поддерживает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.