Модульне тестування з JUnit

Вступ до тестування в Java

Maria Milusheva

Senior Software Engineer

Модульне тестування — визначення

Два ключові поняття:

Модуль (unit) — найменша частина застосунку, яку можна протестувати, наприклад метод

Модульне тестування — тест, що перевіряє коректність окремого «модуля» коду ізольовано від інших частин застосунку

Вступ до тестування в Java

Модульне тестування — про деталі

Нотатки:

  • Модульне тестування стосується маленьких фрагментів логіки, а не загальної картини

  • Інші види тестування зосереджені на загальній картині (наприклад, інтеграційне)

  • Назва JUnit походить від його основного призначення — модульного тестування

Графіка, що інтуїтивно показує зв'язок між модульними тестами та промисловим кодом

Вступ до тестування в Java

Види тестування — короткий огляд

  • У цьому курсі ми здебільшого розглядатимемо тести unit і integration
  • Але видів тестування набагато більше!

Діаграма видів тестування ПЗ: функціональні (наприклад, модульне тестування) та нефункціональні (наприклад, оцінювання зручності)

Вступ до тестування в Java

Види тестування — короткий огляд

  • У цьому курсі ми здебільшого розглядатимемо тести unit і integration
  • Але видів тестування набагато більше!

Діаграма видів тестування ПЗ: функціональні (наприклад, модульне тестування) та нефункціональні (наприклад, оцінювання зручності). На цій версії обведено модульне й інтеграційне тестування

Вступ до тестування в Java

Синтаксис JUnit: assertTrue() і assertFalse()

  • 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
Вступ до тестування в Java

assertNull() і assertNotNull()

Змінні null можуть призвести до NullPointerException!

  • Перевірки на nullassertNull() і assertNotNull()

  • Типовий випадок: значення, отримане звідкись, не має бути null

Map<String, Integer> catalogue = new HashMap<>();

catalogue.put("item1", 10);

// No errors
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
Вступ до тестування в Java

Перевірка винятків

Припустімо, треба підтвердити, що кидається ArrayIndexOutOfBoundsException:

public String getIndex(String[] array, int index) {
    return array[index];
}

JUnit пропонує кілька способів зробити це!

Вступ до тестування в Java

assertInstanceOf()

  • У JUnit є assertThrows(), але він використовує просунутий синтаксис Java (лямбда-вирази)

  • Можна використати assertInstanceOf() так:

try {
    getIndex(new String[]{}, 4);
} catch (Exception e) {
    // Передайте очікуваний клас винятку та сам виняток  
    assertInstanceOf(ArrayIndexOutOfBoundsException.class, e); 
}
1 https://www.baeldung.com/junit-assert-exception
Вступ до тестування в Java

Іменування модульних тестів

  • Типовий проєкт містить сотні модульних тестів

  • Вони мають бути легкими та зрозумілими

  • Назви мають бути інформативними, щоб одразу було видно, що пішло не так у разі збою

Наприклад: methodUnderTest_expectedBehavior_conditions()

1 https://dzone.com/articles/7-popular-unit-test-naming?fromrel=true
Вступ до тестування в Java

Давайте потренуємось!

Вступ до тестування в Java

Preparing Video For Download...