Рівень тесту обирають за ризиком
Unit, integration і API-тести відповідають на різні питання. Один сценарій може потребувати кількох рівнів, бо ізольоване правило, взаємодія компонентів і зовнішній HTTP-контракт мають різні точки відмови.
| Рівень | Що перевіряє | Приклад refund |
|---|---|---|
| Unit | Ізольоване правило або обчислення | Повернення заборонене після 14 днів |
| Integration | Взаємодію компонентів і сховище | Повторний запит не створює дубль |
| API | Зовнішній HTTP-контракт | Відʼємна сума дає статус 400 |
Unit-тест: швидкий сигнал про правило
Наприклад, RefundPolicy може отримати кількість днів і факт попереднього повернення та визначити, чи дозволена операція.
- Підходить для business rules, validators і розрахунків.
- Не потребує бази, мережі або повного HTTP-контексту.
- Швидко локалізує помилку й зручний для TDD.
- Не доводить роботу транзакції, серіалізації або репозиторію.
- Не замінює integration-тест, якщо ризик лежить на стику компонентів.
Integration-тест: перевірка взаємодії
Integration-тест доречний, коли важливі реальний repository, обмеження бази, транзакції, мапінг даних або взаємодія сервісів. Для refund це може бути підтвердження, що повторний запит не створює другий запис.
Сигнал сильніший, але дорожчий: тестове середовище запускається довше. Використовуйте вузький test slice, Testcontainers або наявні профілі проєкту замість без потреби піднімати весь застосунок.
API-тест захищає контракт клієнта
| Що перевірити | Приклад |
|---|---|
| Маршрут і метод | POST на endpoint refund |
| Статус | 400 для відʼємної суми |
| JSON body | Погоджений код і повідомлення помилки |
| Валідація й headers | Відповідь до виклику небезпечної логіки |
| Авторизація | Правильна поведінка для ролі без доступу |
Як делегувати генерацію тесту
- Попросіть Claude прочитати сусідні тести.
- Назвіть ризик і потрібний рівень перевірки.
- Вкажіть конкретний пакет або файл.
- Забороніть зміни production-коду, helper-ів і залежностей без погодження.
- Попросіть дотримуватися наявного стилю.
- Перегляньте assertions і diff після генерації.
Канонічне джерело уроку · JavaRush
Відкрити матеріал JavaRush