Выбор ответа Senior Тестирование: JUnit 5 и Mockito обновлено
Чрезмерные verify
Вопрос
Тесты сервиса делают verify на каждый внутренний вызов зависимостей и ломаются при любом рефакторинге без изменения поведения. В чём проблема?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Тесты проверяют реализацию, а не поведение; verify только для важного. Хороший тест проверяет наблюдаемый результат: возвращаемое значение, состояние, важный побочный эффект вроде отправки письма или сохранения.
Варианты ответа
- Тесты проверяют реализацию, а не поведение; verify только для важногоправильный ответ
- Нужно использовать
verifyNoMoreInteractionsво всех тестах сервиса - Нужно заменить моки Mockito на spy, чтобы вызовы шли в реальные классы
- Так и должно быть: тесты обязаны ломаться при любом изменении кода
Разбор
Хороший тест проверяет наблюдаемый результат: возвращаемое значение, состояние, важный побочный эффект вроде отправки письма или сохранения. Проверка каждого вызова делает тесты хрупкими и бесполезными при рефакторинге. verifyNoMoreInteractions везде только усилит хрупкость. Spy реальные объекты не лечат проблему. Тесты должны ломаться при изменении поведения, а не реализации.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.