Выбор ответа Middle Тестирование: JUnit 5 и Mockito обновлено
Смешивание матчеров
Вопрос
Почему упадёт when(client.charge(any(), 500L)).thenReturn(ok)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Если один аргумент матчер, остальные тоже: нужно eq(500L). Mockito запоминает матчеры в стеке и сопоставляет их с аргументами по количеству.
Варианты ответа
any()нельзя использовать внутриwhen, только вverifythenReturnне принимает объекты, только примитивы и строки- Он не упадёт: Mockito сам обернёт
500Lв матчерeq - Если один аргумент матчер, остальные тоже: нужно
eq(500L)правильный ответ
Разбор
Mockito запоминает матчеры в стеке и сопоставляет их с аргументами по количеству. Смешение матчера и обычного значения даёт InvalidUseOfMatchersException. Исправление: when(client.charge(any(), eq(500L))). В when и verify any() разрешён, thenReturn принимает любые значения.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.