JUnit 5 является фреймворком для тестирования программного обеспечения, который используется разработчиками для модульного тестирования их кода. Это фреймворк на основе Java, который позволяет писать и запускать тесты на платформе Java, включая встроенный репортер, который отображает результаты тестирования.
JUnit может использоваться для автоматизированного тестирования с двумя основными целями:
- Проверить, что программное обеспечение работает так, как ожидается
- Найти и сообщить об ошибках в коде и исправить их как можно быстрее
В этом блоге мы сосредоточимся на настройке, конфигурации и основных методах, используемых в 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
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
Вот полный файл pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.github.mfaisalkhatri</groupId>
<artifactId>junit-basic</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>junit-basic</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.11.4</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
После добавления зависимостей мы готовы к написанию теста. Но прежде чем мы перейдем к написанию тестов с использованием JUnit 5, давайте сначала понимать основные аннотации, которые помогут нам эффективно настроить набор тестов и запускать тесты по желанию.
Основные аннотации, используемые в JUnit 5
Следующие аннотации являются основными и наиболее популярно используются разработчиками при написании тестов с использованием JUnit 5.
@BeforeAll Аннотация
Аннотация @BeforeAll
указывает, что аннотированный метод должен быть выполнен перед любыми методами @Test
, @RepeatedTest
, @ParameterizedTest
или @TestFactory
в текущем классе. Он должен быть статическим методом в классе теста.
@BeforeAll
служит заменой аннотации @BeforeClass
, используемой в JUnit 4.x
Синтаксис:
public class BasicTest {
public static void beforeAllTest() {
System.out.println("Before All method called!!");
}
//..
}
@BeforeEach Аннотация
Аннотация @BeforeEach
указывает, что аннотированный метод должен быть выполнен перед каждым вызовом методов @Test
, @RepeatedTest
, @ParameterizedTest
или @TestFactory
в текущем классе.
Она является частью методов жизненного цикла тестирования и заменяет аннотацию @Before
, использованную в JUnit 4.
Синтаксис:
public class BasicTest {
public void beforeEachTest() {
System.out.println("Before Each method called!!");
}
//...
}
@AfterAll Аннотация
Аннотация @AfterAll
указывает, что аннотированный метод должен быть вызван после выполнения всех тестов в текущем классе. Он должен быть статическим методом и используется как метод завершения в классе теста.
@AfterAll
является заменой аннотации @AfterClass
в JUnit 4.
Синтаксис:
public class BasicTest {
//...
public static void afterAllMethod() {
System.out.println("After All method called!!");
}
}
@AfterEach Аннотация
Аннотация @AfterEach
указывает, что аннотированный метод должен быть выполнен после каждого метода @Test
, @RepeatedTest
, @ParameterizedTest
или @TestFactory
в текущем классе.
Он служит в качестве замены JUnit 5 для аннотации @After
, используемой в JUnit 4.
Синтаксис:
public class BasicTest {
//...
public void afterEachMethod() {
System.out.println("After Each method called!!");
}
}
Аннотация @Test
Аннотация @Test
указывает, что аннотированный метод является методом тестирования. Метод тестирования не должен быть приватным или статическим и не должен возвращать значение.
Синтаксис:
public class BasicTest {
//..
public void testMethod() {
System.out.println("Test Method Called!!");
}
}
Аннотация @DisplayName
Аннотация @DisplayName
используется для указания пользовательского имени для аннотированного класса или метода тестирования. Эти пользовательские имена могут включать пробелы, специальные символы, и даже эмодзи, и обычно используются в отчетах о тестировании, создаваемых средами разработки и сборочными инструментами.
Синтаксис:
"Demo Test class") (
public class BasicTest {
//...
"This is a demo test") (
public void testMethod() {
System.out.println("Test Method Called!!");
}
}
Аннотация @Disabled
Аннотация @Disabled
в JUnit 5 используется для исключения метода тестирования или класса тестирования из набора тестов для выполнения.
Примененная к классу тестирования, все методы внутри этого класса автоматически считаются отключенными. У этой аннотации есть необязательный параметр, который позволяет указать причину отключения теста.
Синтаксис:
public class BasicTest {
"Test method disabled") (
public void testMethod() {
System.out.println("Test Method Called!!");
}
//...
}
Как писать автоматизированные тестовые случаи с использованием JUnit 5
Пора приступить к коду и попачкать руки с JUnit 5. Мы создадим новый класс Java, BasicTest.
public class BasicTest {
//..
}

Все основные аннотации, о которых мы говорили, будут рассмотрены в рамках демонстрации.
Давайте добавим методы в классе BasicTest, чтобы продемонстрировать использование аннотаций @BeforeAll
, @BeforeEach
, @AfterAll
, @AfterEach
, @Test
, @DisplayName
и @Disabled
, доступных в JUnit 5.
"Demo Test class") (
public class BasicTest {
public static void beforeAllTest() {
System.out.println("Before All method called!!");
}
public void beforeEachTest() {
System.out.println("Before Each method called!!");
}
"This is a demo test") (
public void testMethodOne() {
System.out.println("Test Method One Called!!");
}
"This test is disabled to demo disable annotation") (
public void disabledTest() {
System.out.println("This is a disabled test!!");
}
public void testMethodTwo() {
System.out.println("Test Method Two Called!!");
}
public void afterEachMethod() {
System.out.println("After Each method called!!");
}
public static void afterAllMethod() {
System.out.println("After All method called!!");
}
}
Обзор кода
Аннотация @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