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

Смешивание матчеров

Вопрос

Почему упадёт when(client.charge(any(), 500L)).thenReturn(ok)?

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

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

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

Коротко

Правильный ответ: Если один аргумент матчер, остальные тоже: нужно eq(500L). Mockito запоминает матчеры в стеке и сопоставляет их с аргументами по количеству.

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

  1. any() нельзя использовать внутри when, только в verify
  2. thenReturn не принимает объекты, только примитивы и строки
  3. Он не упадёт: Mockito сам обернёт 500L в матчер eq
  4. Если один аргумент матчер, остальные тоже: нужно eq(500L)правильный ответ

Разбор

Mockito запоминает матчеры в стеке и сопоставляет их с аргументами по количеству. Смешение матчера и обычного значения даёт InvalidUseOfMatchersException. Исправление: when(client.charge(any(), eq(500L))). В when и verify any() разрешён, thenReturn принимает любые значения.

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

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

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