Ответ вслух Junior Тестирование: JUnit 5 и Mockito спрашивают часто обновлено

Как вы пишете юнит-тесты

Вопрос

Как вы пишете юнит-тесты? Что делает тест хорошим?

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Каждый тест проверяет одно поведение и строится по схеме given-when-then: подготовил данные, вызвал метод, проверил результат. Внешние зависимости класса, то есть репозитории, клиенты, часы, подменяю моками или фейками, а простые объекты-значения создаю настоящие.

Что должно прозвучать в ответе

  • Структура given-when-then (arrange-act-assert)

  • Изоляция зависимостей моками, тест одного поведения

  • Позитивные, негативные и граничные случаи

  • Детерминизм: Clock, без sleep и зависимости от порядка

  • Понятные имена, проверка поведения, а не реализации

  • Быстрые: без сети и БД в юнит-тестах

Что могут спросить следом

  • Что вы мокаете, а что нет?
  • Как вы относитесь к метрике покрытия?

Разбор

Каждый тест проверяет одно поведение и строится по схеме given-when-then: подготовил данные, вызвал метод, проверил результат. Внешние зависимости класса, то есть репозитории, клиенты, часы, подменяю моками или фейками, а простые объекты-значения создаю настоящие. Кроме счастливого пути пишу негативные и граничные случаи: пустой список, ноль, null, максимальные значения, исключения через assertThrows. Тест должен быть детерминированным: время через Clock, никакого Thread.sleep, независимость от порядка. Имя теста описывает сценарий, например rejectsExpiredCoupon. Проверяю наблюдаемое поведение, а не каждый внутренний вызов, иначе тесты ломаются от рефакторинга. Покрытие использую как подсказку, где тестов нет, а не как цель.

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

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

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