Ответ
Требования варьируются в зависимости от критичности модуля и зрелости проекта. Типичный диапазон — от 70% до 90%.
- Критичные модули (платежи, ядро бизнес-логики): 90%+.
- Стандартные сервисы: 80-85%.
- Вспомогательные или унаследованные модули: 70-80%.
Пример для сервиса с требованием 85%:
public class PaymentService {
public boolean processPayment(double amount) {
if (amount <= 0) {
throw new IllegalArgumentException("Amount must be positive");
}
// Основная логика обработки платежа
return paymentGateway.charge(amount);
}
}
Для достижения покрытия потребуются тесты:
@Test
void processPayment_positiveAmount_returnsTrue() { ... }
@Test
void processPayment_zeroAmount_throwsException() {
assertThrows(IllegalArgumentException.class,
() -> service.processPayment(0.0));
}
@Test
void processPayment_negativeAmount_throwsException() { ... }
Ключевые аспекты и инструменты:
- Измерение: Используются инструменты вроде JaCoCo (для Java) или Istanbul (для JS). Они интегрируются в сборку (Maven/Gradle) и CI/CD.
- Качество vs. Количество: 100% покрытие не гарантирует отсутствие багов. Важны смысловые тесты на граничные случаи, а не тесты для геттеров/сеттеров.
- CI/CD проверка: В пайплайне часто стоит gate, который не позволяет смержить PR, если покрытие падает ниже заданного порога.
- Отчеты: Результаты coverage публикуются в виде отчетов (HTML), чтобы команда видела непокрытые ветви кода (branch coverage).