JUnit 5

Записки по курсу "Тестирование с использованием Junit 5"

Что такое тестирование? Уровни тестирования.

Тестирование ПО - это процесс испытания программы, целью которого является определить соответствие между ожидаемым (expected) и актуальным (actual) поведениями с помощью набора тестов.

Регрессионное тестирование - проверка работоспособности старого функционала.


Уровни тестирования. Пирамида тестирования.

Пирамида тестирования
  • модульное тестирование (Unit testing);
  • интеграционное тестирование (Integration testing);
  • системное тестирования;
  • приемочное тестирование (Acceptance testing).

    End To End, E2E, Functional testing

Но можно встретить варианты, где 3 уровня.
В этой модели объединяют интеграционный и системный уровни.

Unit testing - тестирование базового (маленького) компонента приложения.

Делается для того что бы проверить что тестируемый unit работает правильно в изоляции от других компонентов

Integration testing - тестирование нескольких компонентов приложения.

Делается для того что бы проверить что тестируемые unit'ы работают вместе правильно (как один большой unit).

Acceptance testing - тестирование всего приложения в целом.

Т.е. как оно работает со стороны пользователя (Функциональное тестирование)

Из чего состоит JUnit5?

JUnit 5 разбит на несколько основных под-проектов:

Для работы JUnit5 необходима версия Java8 или выше

Создание теста

По умолчанию тесты создаются в папке src/test/<...>

Структура далее обычно совпадает структурой кода.

Но как всегда все можно перенастроить.

Имя файла должно заканчиваться на Test.

В Unit 5 классы тестов и сами тесты могут не быть public как раньше.

Методы тестов аннотируются @Test

Но не только ей, есть еще другие аннотации.

В наименовании метода теста допускается написание camel-case и snake-case

Для проверки ожидаемого и актуального значений используются методы из класса org.junit.jupiter.api.Assertion.

Для расширения функциональности ассертов можно использовать библиотеки AssertJ, Hamcrest и д.р.

Порядок выполнения тестов не гарантирован.

Жизненный цикл теста

Жизненный цикл теста

Порядок выполнения тестов не гарантирован!!!

По умолчанию для выполнения каждого теста создается свой экземпляра класса теста, что бы обезопасить работу с данными.

Это поведение определяет аннотация:

@TestInstance(TestInstance.Lifecycle.PER_METHOD)

Что бы изменить это поведение нужно использовать другой параметр

@TestInstance(TestInstance.Lifecycle.PER_CLASS)

При использовании PER_METHOD создается один инстанс класса с тестами.

Важное замечание:
Если используется PER_METHOD, то методы помеченные аннотациями @BeforeAll и @AfterAll должны быть статическими, а если PER_CLASS - то нет, т.е. в этом случае в этих методах есть доступ к не статическому контексту.