Архитектура JUnit 5. Часть 6

15.09.2020 49
Предыдущая часть

Это последняя часть нашей серии статей об архитектуре JUnit 5. Здесь мы рассмотрим используемый в JUnit 5 подход. При использовании собственных расширений JUnit 5 обеспечивает такие же возможности, как JUnit 4 при использовании правил. Код на основе стиля декларативных аннотаций становится более компактным. Сначала мы определяем класс CustomExtension, который используется в качестве аргумента аннотации @ExtendWith для тестируемого класса.

Listing 9. The CustomExtension class
В Примере 9 мы делаем следующее:

  1. Декларируем CustomExtension как реализацию интерфейсов AfterEachCallback и BeforeEachCallback (1’).

  2. Переопределяем метод afterEach, который будет выполняться после каждого тестового метода из тестового класса, расширенного с помощью CustomExtension (2’).

  3. Переопределяем метод beforeEach, который будет выполняться перед каждым тестовым методом из тестового класса, расширенного с помощью CustomExtension (3’). 
Listing 10. The JUnit5CustomExtensionTester class
В Примере 10 мы делаем следующее:

  1. Расширяем JUnit5CustomExtensionTester с помощью класса CustomExtension (1’).

  2. Создаем метод myCustomRuleTest и добавляем к нему аннотацию @Test (2).

Поскольку тестовый класс расширен с помощью класса CustomExtension, ранее определенные методы beforeEach и afterEach выполняются соответственно до и после каждого тестового метода.

Отметим очевидную разницу в ясности кода и длине кода между JUnit 4 и JUnit 5. В JUnit 4 нужно использовать три класса, а JUnit 5 нужно только два класса. Код будет выполняться до и после того, как каждый тестовый метод будет изолирован в специальном методе с ясным наименованием. Что касается тестового класса, то нужно только добавить к нему аннотацию @ExtendWith.

Модель расширений в JUnit 5 можно также использовать для постепенной замены средств запуска из JUnit 4. Для расширений, которые уже созданы, процесс переноса будет простым. Например:

  • Для переноса тестов Mockito необходимо в тестовом классе заменить аннотацию @RunWith(MockitoJUnitRunner.class) на аннотацию @ExtendWith(MockitoExtension.class).
  • Для переноса тестов Spring необходимо в тестовом классе заменить аннотацию @RunWith(SpringJUnit4ClassRunner.class) на аннотацию @ExtendWith(MockitoExtension.class).

  • На момент написания этой статьи для тестов Arquillian расширение еще не создано.

Заключение

В статье рассмотрена новая архитектура JUnit 5, в которой устранены недостатки предыдущей версии JUnit 4. Особое внимание было уделено применению модульного подхода в JUnit 5. Кроме того, показаны возможности перехода с кода JUnit 4 на код JUnit 5, в том числе переход с правил на расширения и переход с настраиваемых правил на настраиваемые расширения.


Автор Catalin Tudose, Java and Web Technologies Expert


Расскажи друзьям:

 
Оценка и обучение ИТ-специалистов по ключевым направлениям разработки программного обеспечения. Курсы от экспертов-практиков по языкам программирования, системному и бизнес-анализу, управлению проектами, тестированию ПО, архитектуре ПО. Luxoft Training – единственный учебный центр в России, авторизованный IIBA. Действует скидка 10% на обучение физических лиц.
   Подпишись на ежемесячный DigestLT
Успешная форма подписки.
Пользователь только что записался на курс ""
Спасибо!
Форма отправлена успешно.