Ответ
Автоматизированные тесты покрывают различные уровни и аспекты качества кода:
- Функциональность (Unit-тесты) — проверяют корректность работы отдельных модулей (методов, классов) в изоляции.
- Интеграция (Integration-тесты) — проверяют взаимодействие между несколькими компонентами (база данных, внешние сервисы, модули).
- Системное поведение (End-to-End / E2E тесты) — проверяют работу системы в целом, с точки зрения пользователя.
- Регрессия — гарантируют, что новые изменения не нарушили существующий функционал.
- Граничные случаи и ошибочные сценарии — проверка на нестандартные входные данные (
null, пустые коллекции, отрицательные числа, превышение лимитов). - Производительность и нагрузка — оценивают время отклика, стабильность и использование ресурсов под нагрузкой.
Пример JUnit-теста, покрывающего основной и граничный случай:
import static org.junit.jupiter.api.Assertions.assertEquals;
@Test
void sum_PositiveNumbers_ReturnsCorrectSum() {
Calculator calc = new Calculator();
assertEquals(4, calc.sum(2, 2)); // Основной сценарий
}
@Test
void sum_NegativeAndPositive_ReturnsCorrectSum() {
Calculator calc = new Calculator();
assertEquals(0, calc.sum(-1, 1)); // Граничный случай
}
@Test
void sum_MaxIntValue_ThrowsArithmeticException() {
Calculator calc = new Calculator();
assertThrows(ArithmeticException.class, () -> calc.sum(Integer.MAX_VALUE, 1));
}
Качество тестов определяется их изолированностью, предсказуемостью, читаемостью и полнотой покрытия ключевых сценариев.