Вступ до тестування в Java
Maria Milusheva
Senior Software Engineer
Два ключові поняття:
Модуль (unit) — найменша частина застосунку, яку можна протестувати, наприклад метод
Модульне тестування — тест, що перевіряє коректність окремого «модуля» коду ізольовано від інших частин застосунку
Нотатки:
Модульне тестування стосується маленьких фрагментів логіки, а не загальної картини
Інші види тестування зосереджені на загальній картині (наприклад, інтеграційне)
Назва JUnit походить від його основного призначення — модульного тестування



assertTrue() перевіряє, що твердження істинне: List<String> list = new ArrayList<>();
assertTrue(list.isEmpty()); // No error
assertFalse() перевіряє протилежне:List<String> list = new ArrayList<>();
list.add("A");
assertFalse(list.isEmpty()); // No error
Змінні null можуть призвести до NullPointerException!
Перевірки на null — assertNull() і assertNotNull()
Типовий випадок: значення, отримане звідкись, не має бути null
Map<String, Integer> catalogue = new HashMap<>();
catalogue.put("item1", 10);
// No errors
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
Припустімо, треба підтвердити, що кидається ArrayIndexOutOfBoundsException:
public String getIndex(String[] array, int index) {
return array[index];
}
JUnit пропонує кілька способів зробити це!
У JUnit є assertThrows(), але він використовує просунутий синтаксис Java (лямбда-вирази)
Можна використати assertInstanceOf() так:
try {
getIndex(new String[]{}, 4);
} catch (Exception e) {
// Передайте очікуваний клас винятку та сам виняток
assertInstanceOf(ArrayIndexOutOfBoundsException.class, e);
}
Типовий проєкт містить сотні модульних тестів
Вони мають бути легкими та зрозумілими
Назви мають бути інформативними, щоб одразу було видно, що пішло не так у разі збою
Наприклад: methodUnderTest_expectedBehavior_conditions()
Вступ до тестування в Java