Ответ
Оценка строится не только на метрике покрытия, но на комплексных критериях:
1. Типы и уровни тестов:
- Модульные (Unit) тесты: Проверяют изолированную бизнес-логику.
func testLoginWithInvalidCredentials() { let service = AuthService() let result = service.login(email: "wrong", password: "123") XCTAssertEqual(result, .failure(.invalidCredentials)) } - Интеграционные тесты: Проверяют взаимодействие модулей (сеть, БД, сервисы).
- UI-тесты (E2E): Автоматизируют ключевые пользовательские сценарии.
2. Качество тестов (важнее процента покрытия):
- Читаемость: Тест должен четко описывать сценарий (Given-When-Then).
- Изоляция: Тесты не зависят друг от друга и порядка выполнения.
- Скорость: Unit-тесты выполняются быстро (миллисекунды).
- Надежность: Отсутствие flaky-тестов, которые падают случайно.
3. Смысловое покрытие (Scope):
- Happy Path: Основной успешный сценарий.
- Edge Cases: Граничные значения, пустые данные, пределы.
- Обработка ошибок: Корректная реакция на сетевые сбои, невалидные данные.
- Критичный путь: Наиболее важная для бизнеса логика покрыта в первую очередь.
4. Метрика покрытия (Code Coverage): Используется как индикатор, а не цель. 70-80% осмысленного покрытия часто лучше, чем 95%, достигнутые тестированием геттеров/сеттеров. Резкие падения процента покрытия сигнализируют о потенциальных рисках.