Архитектура JUnit 5

06.08.2020 297
В этой статье рассматривается новая архитектура JUnit 5 и недостатки предыдущей версии JUnit 4, а также изменения, связанные с модульным подходом, и его преимущества. Показано, как перейти с кода JUnit 4 на JUnit 5, чтобы эффективно использовать новые возможности.

1. Модульность JUnit 5

Выпуск JUnit 5 означает, что пришло время для новых подходов. Это произошло далеко не сразу; потребовалось время на осмысление недостатков JUnit 4, которые наглядно показали, какие улучшения необходимы. Зная эти проблемы, архитекторы решили пойти по пути уменьшения размера и внедрения модульности.

Для дальнейшего развития фреймворка JUnit был необходим новый — модульный — подход. Такая архитектура должна была обеспечить взаимодействие JUnit с различными программными клиентами, разными инструментами и средами IDE. Для логического отделения потребовалось следующее:
  • интерфейс API для написания тестов, предназначенный главным образом для разработчиков;

  • механизм для обнаружения и выполнения тестов;

  • API для обеспечения удобного взаимодействия со средами IDE и инструментами, а также для запуска соответствующих тестов.

В результате была предложена архитектура JUnit 5, состоящая из трех модулей (Рис. 1):

  • Модуль JUnit Platform служит основой для запуска фреймворков тестирования на JVM (виртаульной машине Java), а также предоставляет API для запуска тестов из консоли, IDE или встроенных инструментов.
  • Модуль JUnit Jupiter представляет собой сочетание новой модели программирования и модели расширения для написания тестов и расширений в JUnit 5. Свое имя он получил по названию пятой самой большой планеты в нашей солнечной системе.
  • Модуль JUnit Vintage — это среда тестирования для запуска тестов на основе JUnit 3 и JUnit 4 на платформе, обеспечивающей необходимую обратную совместимость.

Рисунок 1. Модульная архитектура JUnit 5
Рисунок 1. Модульная архитектура JUnit 5


2. Платформа JUnit 5

Продолжая рассмотрение концепции модульности, необходимо кратко остановиться на артефактах, содержащихся в модуле JUnit 5 Platform (Рис. 2):

  • junit-platform-commons — внутренняя общая библиотека JUnit, предназначенная исключительно для использования с самим фреймворком JUnit. Использование сторонними клиентами не поддерживается.
  • junit-platform-console обеспечивает поддержку для обнаружения и выполнения тестов в JUnit Platform из консоли.

  • junit-platform-console-standalone — исполняемый архив JAR со всеми включенными в него зависимостями. Он используется Console Launcher, Java-приложением командной строки, которое позволяет запускать JUnit Platform из консоли. Например, он может использоваться для запуска тестов JUnit Vintage и JUnit Jupiter, а также для вывода результатов выполнения тестов на консоль.

  • junit-platform-engine — общедоступный интерфейс API для тестовых сред.

  • junit-platform-launcher — общедоступный интерфейс API для настройки и запуска планов тестирования, который обычно используется IDEs и встроенными инструментами.

  • junit-platform-runner — средство запуска для выполнения тестов и наборов тестов на JUnit Platform в среде JUnit 4.

  • junit-platform-suite-api содержит аннотации для настройки наборов тестов на JUnit Platform.

  • junit-platform-surefire-provider обеспечивает поддержку для обнаружения и выполнения тестов на JUnit Platform с использованием Maven Surefire.junit-platform-gradle-plugin, который обеспечивает поддержку для обнаружения и выполнения тестов на JUnit Platform с использованием Gradle.

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

Продолжение


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

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