Ответ
Я не придерживаюсь жесткого единого процента для всего проекта. Моя практика основана на разумном подходе, где важнее качество тестов, чем их количество.
Обычно я стремлюсь к следующему:
- Критичная бизнес-логика и ядро приложения (Domain Layer): Цель — 90%+ покрытия модульными тестами. Это расчеты, алгоритмы, правила предметной области.
- Сервисный слой (Application Layer): Здесь много интеграций. Я фокусируюсь на интеграционных тестах для ключевых сценариев, покрытие может быть 70-80%.
- Контроллеры, API-эндпоинты: Пишу сквозные (E2E) или интеграционные тесты для основных путей выполнения (happy path, ошибки валидации). Процентное покрытие здесь менее показательно.
- Инфраструктурный код (база данных, внешние API): Часто используется мокирование или тесты с тестовой БД (например, Testcontainers). Покрываю основные сценарии взаимодействия.
Пример настройки отчета о покрытии в .NET (coverlet + ReportGenerator):
<!-- В .csproj файле тестов -->
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
</ItemGroup>
# Запуск тестов с сбором покрытия и генерацией отчета
dotnet test --collect:"XPlat Code Coverage" --results-directory ./TestResults
reportgenerator -reports:"./TestResults/**/coverage.cobertura.xml" -targetdir:"./CoverageReport" -reporttypes:Html
Я всегда исключаю из метрик покрытия автоматически сгенерированный код, DTO и простые свойства. Главный критерий — уверенность в том, что изменения в коде не сломают существующую функциональность, которую проверяют тесты.
Ответ 18+ 🔞
Давай я тебе на пальцах объясню, как я с этим покрытием работаю, а то народ часто загоняется в цифры, как будто это соревнование кто больше. Это пиздопроебибна какая-то гонка.
Вот смотри, я не ставлю одну циферку на всё подряд, типа «будь 80% и отъебись». Это путь в никуда, чувак. У меня подход простой, как три копейки: главное — чтобы тесты были умными и ловили реальные косяки, а не чтобы просто зелёная полоска в отчёте радовала глаз.
Вот как я обычно делю:
- Самое важное — бизнес-сердцевина (Domain Layer): Вот тут я выжимаю 90% и больше, без компромиссов. Потому что если тут алгоритм наебнётся, то всему пиздец. Каждое правило, каждый расчёт — всё должно быть покрыто юнит-тестами так, чтобы хоть трава не росла.
- Сервисный слой, где всё друг с другом общается (Application Layer): Тут уже интеграция пошла, с базой, с внешними API. Я делаю упор на интеграционные тесты для ключевых сценариев. Покрытие может быть 70-80%, и это нормально, потому что главное — проверить, что всё вместе работает, а не каждый чих по отдельности.
- Контроллеры, эти самые API-шные точки: Тут вообще проценты — хуйня полная. Я пишу сквозные (E2E) тесты, которые проверяют: отправил запрос — получил ожидаемый ответ или ошибку. Считай, что это проверка дымом, работает ли система в целом. Гоняться за циферкой здесь — это как мерять температуру комнаты градусником из жопы.
- Всякая инфраструктура (база, кэш, сторонние сервисы): Тут или мокаем всё нахуй, или поднимаем тестовую базу в Docker. Покрываем основные сценарии: «сохранилось?», «прочиталось?», «упало с правильной ошибкой?». И всё.
Я всегда из метрик выкидываю нахуй автоматически сгенерированный код, всякие голые DTO и простые getter/setter-свойства. Зачем их тестировать? Чтобы отчёт красивый был? Да похуй!
Вот мой главный критерий, ёпта: я должен быть уверен, что когда я что-то поменяю в коде, тесты накостыляют мне по ебалу, если я что-то сломал. Вот и вся философия. А зелёная полоска в 95% — это просто приятный бонус, если она не достигнута ебанутым нагромождением бессмысленных тестов.
Кстати, вот как это в .NET настроить (coverlet + ReportGenerator), если кому надо:
<!-- В .csproj файле тестов -->
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
</ItemGroup>
# Запуск тестов с сбором покрытия и генерацией отчета
dotnet test --collect:"XPlat Code Coverage" --results-directory ./TestResults
reportgenerator -reports:"./TestResults/**/coverage.cobertura.xml" -targetdir:"./CoverageReport" -reporttypes:Html
Сгенерируешь отчёт, посмотришь, где дыры в действительно важных местах — и латаешь. А не гонишься за абстрактной цифрой, ядрёна вошь.