Рівень тесту обирають за ризиком

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Відповідь до виклику небезпечної логіки
АвторизаціяПравильна поведінка для ролі без доступу

Як делегувати генерацію тесту

  1. Попросіть Claude прочитати сусідні тести.
  2. Назвіть ризик і потрібний рівень перевірки.
  3. Вкажіть конкретний пакет або файл.
  4. Забороніть зміни production-коду, helper-ів і залежностей без погодження.
  5. Попросіть дотримуватися наявного стилю.
  6. Перегляньте assertions і diff після генерації.

Канонічне джерело уроку · JavaRush

Відкрити матеріал JavaRush