Сначала ответь вслух
Скажи ответ вслух хотя бы пару минут, потом открой эталон и сравни. Эталон открыт всем и не требует входа.
Показать ответ
Эталонный ответ
mock(Repo.class) создаёт объект, у которого каждый метод возвращает null, 0, false или пустую коллекцию, пока не задано поведение. spy(obj) вызывает настоящие методы объекта, кроме переопределённых.
List<String> list = spy(new ArrayList<>());
when(list.get(0)).thenReturn("jub"); // упадёт: вызовет настоящий get(0) у пустого списка
doReturn("jub").when(list).get(0); // правильно для spyКак у тебя получилось?
Уточняющие вопросы
Так обычно копают глубже. Раскрой строку, когда ответишь вслух.
Уточнение 1-го уровня: Когда spy — признак проблемы в дизайне?
Ответ уровня Middle
Когда приходится подменять часть методов тестируемого класса. Обычно это значит, что зависимость стоит вынести в отдельный объект и подменить её моком.
Типичные ошибки
- Использовать when(...) со spy и случайно вызывать настоящий метод.
- Мокать класс, который тестируешь.
Первоисточники
Быстрые задания по теме
Для темы «Моки и Mockito» быстрых заданий пока нет
Можно проверить всю зону «Тестирование» тестом на 10 минут.
Проверить себя за 10 минут