Prog Academy
RU UA
QA та тестування

Що таке модульне тестування (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));
}
Тест на JUnit: підготували дані, викликали метод, звірили результат з очікуваним.

Часті запитання

Хто пише модульні тести — розробник чи тестувальник?

Як правило розробник, разом із кодом: лише він знає внутрішню будову модуля і може ізолювати його від решти системи. QA-інженери відповідають за вищі рівні — інтеграційні та E2E-перевірки, де система розглядається ззовні.

Що таке моки і заглушки?

Підставні обʼєкти, що замінюють реальні залежності: замість звернення до бази чи платіжного сервісу тест використовує спрощену заміну із заздалегідь відомою відповіддю. Це робить тест швидким, незалежним від зовнішніх систем і повторюваним при кожному запуску.

Яке покриття тестами вважається достатнім?

Універсального числа немає, і сама метрика оманлива: можна мати вісімдесят відсотків покриття і не перевіряти жодного важливого сценарію. Практичніше орієнтуватися на ризик — щільно закривати складну логіку й грошові розрахунки, а тривіальний код лишати без тестів.

Що таке TDD?

Розробка через тестування: спочатку пишуть падаючий тест, потім мінімальний код, щоб він пройшов, потім покращують рішення. Підхід дисциплінує і поліпшує структуру коду, але потребує звички й підходить не кожній задачі — особливо там, де вимоги ще змінюються.

Повʼязані терміни