Руководство для начинающих по JUnit 5

JUnit 5 является фреймворком для тестирования программного обеспечения, который используется разработчиками для модульного тестирования их кода. Это фреймворк на основе Java, который позволяет писать и запускать тесты на платформе Java, включая встроенный репортер, который отображает результаты тестирования.

JUnit может использоваться для автоматизированного тестирования с двумя основными целями:

  1. Проверить, что программное обеспечение работает так, как ожидается
  2. Найти и сообщить об ошибках в коде и исправить их как можно быстрее

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

Что такое JUnit 5?

JUnit 5 является последней версией фреймворка тестирования JUnit. Он поддерживает Java 8 и более новые версии, учитывает различные стили тестирования и предлагает современную основу для тестирования на стороне разработчика на JVM.

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

Особенности JUnit 5

Следующие особенности JUnit 5 являются популярными и важными, и отличают его от других фреймворков модульного тестирования.

Feature Description Annotations/Method
Наборы тестов

Наборы тестов – это в основном группа тестов, таких как Smoke, Sanity, или группа тестов, связанных с определенной функцией.

JUnit 5 позволяет создавать наборы тестов, которые могут быть запущены вместе.

Для использования наборов тестов необходимо добавить зависимость от JUnit Platform Suite и использовать следующие аннотации.
@SelectPackages,
@SelectClasses, @Suite
Утверждения Утверждения используются для проверки ожидаемого поведения программного обеспечения. JUnit 5 предоставляет встроенные методы утверждений, которые помогают легко выполнять проверки. В классе import org.junit.jupiter.api.Assertions; доступно несколько методов утверждений.
Некоторые из методов перечислены ниже:
assertTrue(), assertFalse(),
assertEquals(), assertAll(), assertNotEquals()
Порядок выполнения тестов Настройка порядка выполнения тестов. Это позволяет разработчику контролировать выполнение тестов и запускать их в определенном порядке по необходимости. @TestMethodOrder, @Order,
@TestClassOrder
Тестирование исключений Выполняет тестирование исключений, которое проверяет, что необходимое исключение возникает в тесте. Следующий метод из
import org.junit.jupiter.api.Assertions;
используется в классе:
assertThrows()
Зависимости тестов Зависимости тестов позволяют последовательное тестирование, предоставляя возможность тестовым методам зависеть друг от друга. Это означает, что следующий тестовый метод, который зависит от предыдущего тестового метода, не будет выполнен, пока предыдущий не пройдет. Это полезная функция при написании интеграционных тестов. @TestInstance
Отключение тестов Отключает тесты или тестовые классы. @Disabled
Таймауты Сбой теста, если его время выполнения превышает указанную длительность. @Timeout
Отчеты Предоставляет встроенный отчет для анализа результатов тестов и отображения подробной информации. Генерирует файл .html с результатами выполнения теста. Н/Д

JUnit 4 против JUnit 5

С выпуском последней версии JUnit, т.е. JUnit 5, в рамках фреймворка было внесено множество изменений и новых функций. Различия между двумя версиями перечислены в таблице ниже:

criteria JUNIT4 JUNIT5
Архитектура Все было упаковано в один файл JAR. Разделено на 3 подсистемы:
– Платформа JUnit
– JUnit Jupiter
– JUnit Vintage
Требования к версии JDK Требуется Java 5 или выше Требуется Java 8 или выше
Интеграция с сторонними библиотеками Нет поддержки интеграции сторонних библиотек для плагинов и IDE Выделенная подсистема (Платформа JUnit) для интеграций сторонних библиотек
Поддержка вложенных тестов Нет аннотации для написания вложенных тестов Предоставляет аннотацию @Nested для написания вложенных тестов
Поддержка регистрации пользовательских расширений Нет поддержки пользовательских расширений Предоставляет аннотацию @ExtendWith для регистрации пользовательских расширений
Изменения в часто используемых аннотациях @BeforeClass
@AfterClass
@Before
@After
@Ignore
@BeforeAll
@AfterAll
@BeforeEach
@AfterEach
@Disabled
Изменения аннотаций для тегирования и фильтрации @Category аннотация используется @Tag аннотация используется
Тестовые наборы @RunWith и @Suite аннотации использовались Аннотации @Suite, @SelectPackages и @SelectClasses используются

Начало работы с JUnit 5

В этом разделе мы узнаем, как писать тестовые случаи JUnit 5 с использованием среды IntelliJ IDE. Поскольку она уже поставляется с JUnit 5, нам не нужно выполнять дополнительные установки для его использования.

Нам нужно создать новый проект Maven, добавить зависимости JUnit 5 и начать немедленно писать тесты.

Добавление зависимостей JUnit в проект Maven

Следующие зависимости JUnit 5 нужно добавить в файл pom.xml:

  • JUnit Jupiter Engine
  • JUnit Jupiter API
  • JUnit Platform Suite (агрегатор)
  • JUnit Jupiter Params
XML

 

Вот полный файл pom.xml

XML

 

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

Основные аннотации, используемые в JUnit 5

Следующие аннотации являются основными и наиболее популярно используются разработчиками при написании тестов с использованием JUnit 5.

@BeforeAll Аннотация

Аннотация @BeforeAll указывает, что аннотированный метод должен быть выполнен перед любыми методами @Test, @RepeatedTest, @ParameterizedTest или @TestFactory в текущем классе. Он должен быть статическим методом в классе теста.

@BeforeAll служит заменой аннотации @BeforeClass, используемой в JUnit 4.x

Синтаксис:

Java

 

@BeforeEach Аннотация

Аннотация @BeforeEach указывает, что аннотированный метод должен быть выполнен перед каждым вызовом методов @Test, @RepeatedTest, @ParameterizedTest или @TestFactory в текущем классе.

Она является частью методов жизненного цикла тестирования и заменяет аннотацию @Before, использованную в JUnit 4.

Синтаксис:

Java

 

@AfterAll Аннотация

Аннотация @AfterAll указывает, что аннотированный метод должен быть вызван после выполнения всех тестов в текущем классе. Он должен быть статическим методом и используется как метод завершения в классе теста.

@AfterAll является заменой аннотации @AfterClass в JUnit 4.

Синтаксис:

Java

 

@AfterEach Аннотация

Аннотация @AfterEach указывает, что аннотированный метод должен быть выполнен после каждого метода @Test, @RepeatedTest, @ParameterizedTest или @TestFactory в текущем классе.

Он служит в качестве замены JUnit 5 для аннотации @After, используемой в JUnit 4.

Синтаксис:

Java

 

Аннотация @Test

Аннотация @Test указывает, что аннотированный метод является методом тестирования. Метод тестирования не должен быть приватным или статическим и не должен возвращать значение.

Синтаксис:

Java

 

Аннотация @DisplayName

Аннотация @DisplayName используется для указания пользовательского имени для аннотированного класса или метода тестирования. Эти пользовательские имена могут включать пробелы, специальные символы, и даже эмодзи, и обычно используются в отчетах о тестировании, создаваемых средами разработки и сборочными инструментами.

Синтаксис:

Java

 

Аннотация @Disabled

Аннотация @Disabled в JUnit 5 используется для исключения метода тестирования или класса тестирования из набора тестов для выполнения.

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

Синтаксис:

Java

 

Как писать автоматизированные тестовые случаи с использованием JUnit 5

Пора приступить к коду и попачкать руки с JUnit 5. Мы создадим новый класс Java, BasicTest.

Java

 


Все основные аннотации, о которых мы говорили, будут рассмотрены в рамках демонстрации.

Давайте добавим методы в классе BasicTest, чтобы продемонстрировать использование аннотаций @BeforeAll, @BeforeEach, @AfterAll, @AfterEach, @Test, @DisplayName и @Disabled, доступных в JUnit 5.

Java

 

Обзор кода

Аннотация @DisplayName над классом теста будет отображать имя теста как “Demo test class” в результатах, когда тест будет выполнен.

Метод beforeAllTest() будет выполнен перед запуском любого теста и выведет текст “Before All method Called!!”. Далее метод beforeEachTest() будет выполнен перед каждым тестом и выведет текст “Before Each Method called!!”.

В этом классе три тестовых метода: testMethodOne(), testMethodTwo() и disabledTest(). Все три тестовых метода имеют @Test annotation над собой, что указывает на то, что это тестовые методы.

Метод disabledTest() не будет выполнен, так как над ним есть аннотация @Disabled .

После завершения выполнения каждого теста будет выполнен метод afterEachTestMethod() так как над ним стоит аннотация @AfterEach.

Наконец, после выполнения всех тестов будет выполнен метод afterAllMethod(), так как над ним есть аннотация @AfterAll.

Выполнение тестов

Тесты можно выполнить, щелкнув правой кнопкой мыши на тестовом классе и выбрав “Запустить ‘<Имя тестового класса>'”(“BasicTest” в нашем случае).

Другой способ – щелкнуть по зеленой пиктограмме Play рядом с объявлением тестового класса, как показано на скриншоте ниже:



На следующем скриншоте из среды разработки IntelliJ показано, что тесты были успешно выполнены.

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

Остальные методы тестирования, включая beforetest и aftertest, были успешно выполнены, и соответствующие результаты были напечатаны в консоли.

Сводка

JUnit 5 – мощный тестовый фреймворк, используемый разработчиками для юнит-тестирования кода. Его также используют инженеры по автоматизированному тестированию для написания и выполнения сценариев автоматизированного тестирования. У него есть богатые функциональные возможности, позволяющие разработчикам и тестировщикам писать сценарии тестов и выполнять юнит-тестирование кода.

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

Счастливого тестирования!

Source:
https://dzone.com/articles/beginners-guide-to-junit-5