Що таке модульне тестування (unit-тести)?
Модульне тестування — перевірка окремої невеликої частини коду — функції або класу — в ізоляції від решти системи. Такий тест не звертається до бази даних і зовнішніх сервісів: замість них підставляють заглушки.
Unit-тести — найшвидший і найдешевший рівень перевірки. Вони виконуються за мілісекунди, запускаються сотнями за кожної збірки й точно вказують місце поломки: тест, що впав, одразу називає конкретну функцію.
Пише їх зазвичай сам розробник. Окрім захисту від помилок, вони дають свободу рефакторингу: код можна переписувати, знаючи, що порушення поведінки буде помічено одразу.
Де застосовується
Модульні тести пише сам розробник, зазвичай разом із кодом функції. Їх запускають локально перед надсиланням змін і автоматично в конвеєрі CI — прогін сотень таких тестів займає секунди, тому вони й слугують першою лінією захисту від поломок.
Покривають ними насамперед логіку, де легко помилитися: розрахунок ціни зі знижками й податками, валідацію даних, обробку дат і валют, граничні умови. Мережеві виклики і звернення до бази при цьому підміняють заглушками — інакше тест перестає бути модульним і стає повільним.
Приклад
Функція рахує вартість замовлення зі знижкою. Тести закривають звичайний випадок, нульову суму, знижку в сто відсотків і відʼємну кількість. Будь-яка майбутня правка формули миттєво покаже, яка з цих умов перестала виконуватися.
@Test
void appliesPercentDiscount() {
Order order = new Order(new BigDecimal("1000"));
BigDecimal total = pricing.applyDiscount(order, 15);
assertEquals(new BigDecimal("850"), total);
}
@Test
void rejectsNegativeDiscount() {
Order order = new Order(new BigDecimal("1000"));
assertThrows(IllegalArgumentException.class,
() -> pricing.applyDiscount(order, -5));
} Часті запитання
Хто пише модульні тести — розробник чи тестувальник?
Як правило розробник, разом із кодом: лише він знає внутрішню будову модуля і може ізолювати його від решти системи. QA-інженери відповідають за вищі рівні — інтеграційні та E2E-перевірки, де система розглядається ззовні.
Що таке моки і заглушки?
Підставні обʼєкти, що замінюють реальні залежності: замість звернення до бази чи платіжного сервісу тест використовує спрощену заміну із заздалегідь відомою відповіддю. Це робить тест швидким, незалежним від зовнішніх систем і повторюваним при кожному запуску.
Яке покриття тестами вважається достатнім?
Універсального числа немає, і сама метрика оманлива: можна мати вісімдесят відсотків покриття і не перевіряти жодного важливого сценарію. Практичніше орієнтуватися на ризик — щільно закривати складну логіку й грошові розрахунки, а тривіальний код лишати без тестів.
Що таке TDD?
Розробка через тестування: спочатку пишуть падаючий тест, потім мінімальний код, щоб він пройшов, потім покращують рішення. Підхід дисциплінує і поліпшує структуру коду, але потребує звички й підходить не кожній задачі — особливо там, де вимоги ще змінюються.