Модульное тестирование с JUnit

Введение в тестирование на Java

Maria Milusheva

Senior Software Engineer

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

Два ключевых понятия:

Модуль — наименьшая тестируемая часть приложения, например метод

Модульное тестирование — тест, проверяющий корректность отдельного «модуля» кода в изоляции от остального приложения

Введение в тестирование на Java

Модульное тестирование — это детали

Примечания:

  • Модульное тестирование касается небольших фрагментов логики, а не общей картины

  • Другие виды тестирования охватывают всё приложение целиком (например, интеграционное)

  • JUnit получил своё название именно потому, что его основное назначение — модульное тестирование

Иллюстрация, наглядно показывающая связь между модульными тестами и рабочим кодом

Введение в тестирование на Java

Виды тестирования — краткий обзор

  • В этом курсе мы рассмотрим главным образом модульные и интеграционные тесты
  • Но видов тестирования существует гораздо больше!

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

Введение в тестирование на Java

Виды тестирования — краткий обзор

  • В этом курсе мы рассмотрим главным образом модульные и интеграционные тесты
  • Но видов тестирования существует гораздо больше!

Диаграмма видов тестирования программного обеспечения: функциональное тестирование (например, модульное) и нефункциональное (например, тестирование удобства использования). На этой версии модульное и интеграционное тестирование обведены кружком

Введение в тестирование на 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!

  • Проверка, является ли переменная null или нет, — assertNull() и 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) {
    // Pass the expected class of the exception and the exception itself  
    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...