Писали ли вы тесты
Что проверяют
Пишете ли вы тесты сами и понимаете ли, что именно каким уровнем проверяется. Ответ «да, юнит-тесты» без деталей считается слабым.
Как отвечать
Разложите по уровням и дайте пример.
> «Да, тесты пишу вместе с кодом. Модульные закрывают логику без внешних зависимостей: расчёты, разбор данных, правила валидации. Они быстрые, гоняются на каждое изменение. > > Интеграционные проверяют стыки: репозиторий с настоящей базой в контейнере, клиент внешнего API с поднятой заглушкой. Их меньше, но именно они ловят ошибки схемы и запросов. > > Из последнего: после переписывания слоя выборки тест на число запросов поймал возврат проблемы N+1, которую глазами никто бы не заметил».
Что стоит проговорить по существу:
- проверяем поведение, а не реализацию: тест, который ломается от переименования приватного метода, стоит дороже, чем приносит;
- тестовые данные строятся фабриками, а не копипастой на двадцать строк;
- моки только на границах: подменяем сеть и время, а не собственную логику, иначе тест проверяет моки;
- негативные сценарии обязательны: ошибки, пустые значения, границы, права доступа;
- тесты в CI, иначе они устаревают за месяц.
Про покрытие честно: это индикатор, а не цель. Сто процентов покрытия ничего не говорят, если проверены только счастливые пути.
Где спотыкаются
Называют юнит-тестами всё подряд, включая проверки, ходящие в базу.
Мокают собственный код и проверяют, что моки вызвались.
Пишут тесты после факта, ради отчёта о покрытии.
Не могут назвать ни одного дефекта, пойманного своими тестами.