Что мокать, а что нет
Вопрос
Где вы используете моки, а где предпочитаете настоящие зависимости или Testcontainers?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Мокать границы: внешние API, очереди, время
Не мокать объекты-значения и простую логику
БД лучше проверять на настоящей СУБД через Testcontainers, а не H2
Не мокать то, чем не владеешь, без обёртки (адаптер)
Слишком много моков = сигнал о плохом дизайне
Что могут спросить следом
- Почему H2 вместо PostgreSQL в тестах опасен?
- Что такое контрактные тесты?
Разбор
Мокаю границы системы: внешние HTTP-сервисы, брокеры, почту, а также время и случайность. Объекты-значения, DTO и чистую логику не мокаю, их проще создать настоящими. Слой работы с базой проверяю интеграционными тестами на настоящем PostgreSQL в Testcontainers: H2 отличается диалектом, блокировками, типами, и тест может пройти там, где прод упадёт. Сторонние SDK стараюсь не мокать напрямую, а оборачиваю своим адаптером и мокаю его, а сам адаптер проверяю отдельно, например через WireMock. Если для теста одного класса нужно пять моков с длинными цепочками стабов, это сигнал, что у класса слишком много обязанностей.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.