Тестові дані мають доводити ризик
Набір тестів будується як ланцюжок: ризик → сценарій → дані → перевірка результату → review якості → evidence у PR. Кількість тестів не дорівнює якості, якщо вони не відрізняють правильну реалізацію від дефектної.
| Категорія | Приклади | Що перевірити |
|---|---|---|
| Некоректний ввід | Нульова сума, відʼємне значення, відсутній опис | Validation і відсутність сміттєвих операцій |
| Межі | Повна сума, останній дозволений день | Немає off-by-one помилки |
| Доступ | Користувач без потрібної ролі | Помилка доступу та відсутність змін |
| Повторення | Подвійний однаковий запит | Ідемпотентність і відсутність дубліката |
| Зовнішній сервіс | Timeout платіжного провайдера | Зрозуміла помилка та узгоджений стан |
| Час | UTC, перехід через добу | Стабільний розрахунок строків |
Boundary analysis перевіряє сусідні значення
Для refund policy це може бути попередній день, останній допустимий день і перший заборонений день; для суми — мінімум, нуль, відʼємне значення та значення понад залишок.
- Знайдіть нижню дозволену межу.
- Перевірте значення безпосередньо на межі.
- Перевірте перше значення за межею.
- Порівняйте очікувану поведінку й побічні ефекти.
- Додавайте часові зони або календарні межі лише для релевантної зміни.
Негативний тест перевіряє відсутність побічного ефекту
- Неправильний запит повертає погоджений статус і тіло помилки.
- Запис про refund не створюється.
- Статус замовлення не змінюється.
- Платіжний сервіс не викликається.
- Кошти не списуються та не повертаються частково.
- Після помилки не залишається неконсистентний стан.
Фікстури мають бути синтетичними
Представницькі дані повинні бути зрозумілими, стабільними й достатньо близькими до сценарію, але повністю безпечними. Використовуйте умовний order ID, домен example.com, тестову валюту та очевидну суму.
Не переносіть у тести production ID, реальні адреси, токени, ключі, платіжні дані або фрагменти логів. Реалістичність не виправдовує витік приватної інформації.
orderId: test-order-001
customerEmail: reviewer@example.com
currency: TST
amount: 42.00 Ревʼю тестів — те саме питання, що й для коду
- Чи тестує сценарій зовнішню поведінку, а не приватний метод?
- Чи є змістовні assertions?
- Чи не замокано саме обʼєкт перевірки?
- Чи немає залежності від часу, мережі, випадковості або порядку запуску?
- Чи зрозуміла назва сценарію?
- Чи був regression-тест червоним до fix і зеленим після?
- Чи немає в даних конфіденційної інформації?
Канонічне джерело уроку · JavaRush
Відкрити матеріал JavaRush