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

Чрезмерные verify

Вопрос

Тесты сервиса делают verify на каждый внутренний вызов зависимостей и ломаются при любом рефакторинге без изменения поведения. В чём проблема?

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

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

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

Коротко

Правильный ответ: Тесты проверяют реализацию, а не поведение; verify только для важного. Хороший тест проверяет наблюдаемый результат: возвращаемое значение, состояние, важный побочный эффект вроде отправки письма или сохранения.

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

  1. Тесты проверяют реализацию, а не поведение; verify только для важногоправильный ответ
  2. Нужно использовать verifyNoMoreInteractions во всех тестах сервиса
  3. Нужно заменить моки Mockito на spy, чтобы вызовы шли в реальные классы
  4. Так и должно быть: тесты обязаны ломаться при любом изменении кода

Разбор

Хороший тест проверяет наблюдаемый результат: возвращаемое значение, состояние, важный побочный эффект вроде отправки письма или сохранения. Проверка каждого вызова делает тесты хрупкими и бесполезными при рефакторинге. verifyNoMoreInteractions везде только усилит хрупкость. Spy реальные объекты не лечат проблему. Тесты должны ломаться при изменении поведения, а не реализации.

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

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

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