Перейти к основному содержимому

JUnit 5 @Test Аннотация

· 3 мин. чтения

1. Обзор

В этой статье мы кратко рассмотрим аннотацию JUnit @Test . Эта аннотация предоставляет мощный инструмент для выполнения модульного и регрессионного тестирования.

2. Конфигурация Maven

Чтобы использовать последнюю версию JUnit 5 , нам нужно добавить следующую зависимость Maven:

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>

Мы используем тестовую область, потому что не хотим, чтобы Maven включал эту зависимость в нашу окончательную сборку.

Поскольку подключаемый модуль surefire не полностью поддерживает JUnit 5, нам также потребуется добавить провайдера , который сообщает Maven, где найти наши тесты:

<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.0.2</version>
</dependency>
</dependencies>
</plugin>

В нашей конфигурации мы будем использовать surefire 2.19.1, поскольку на момент написания статьи версия 2.20.x несовместима с junit-platform-surefire-provider .

3. Тестируемый метод

Прежде всего, давайте создадим простой метод, который мы будем использовать в наших тестовых сценариях, чтобы продемонстрировать возможности аннотации @Test :

public boolean isNumberEven(Integer number) {
return number % 2 == 0;
}

Этот метод должен возвращать true , если переданный аргумент является четным числом, и false в противном случае. Теперь давайте проверим, работает ли он так, как должен.

4. Тестирование метода

Для нашего примера мы хотим специально проверить два сценария:

  • при задании четного числа метод должен возвращать true
  • при задании нечетного числа метод должен возвращать false

Это означает, что код реализации вызовет наш метод isNumberEven с другими параметрами и проверит, что результат соответствует ожидаемому.

Чтобы тесты распознавались как таковые, добавим аннотацию @Test . У нас может быть столько их, сколько мы хотим в классе, но хорошей практикой является объединение только связанных. Заметьте также, что тест не должен быть закрытым и не может возвращать значение, иначе он будет просто проигнорирован.

Учитывая эти соображения, давайте напишем наши методы тестирования:

@Test
void givenEvenNumber_whenCheckingIsNumberEven_thenTrue() {
boolean result = bean.isNumberEven(8);

Assertions.assertTrue(result);
}

@Test
void givenOddNumber_whenCheckingIsNumberEven_thenFalse() {
boolean result = bean.isNumberEven(3);

Assertions.assertFalse(result);
}

Если мы сейчас запустим сборку Maven, подключаемый модуль surefire пройдет через все аннотированные методы в классах, размещенных в src/test/java , и выполнит их , что приведет к сбою сборки, если произойдет какой-либо сбой теста .

Если вы работаете с JUnit 4, имейте в виду, что в этой версии аннотация не принимает никаких параметров. Чтобы проверить тайм-аут или выброшенное исключение, вместо этого мы будем использовать утверждения:

@Test
void givenLowerThanTenNumber_whenCheckingIsNumberEven_thenResultUnderTenMillis() {
Assertions.assertTimeout(Duration.ofMillis(10), () -> bean.isNumberEven(3));
}

@Test
void givenNull_whenCheckingIsNumberEven_thenNullPointerException() {
Assertions.assertThrows(NullPointerException.class, () -> bean.isNumberEven(null));
}

5. Вывод

В этом кратком руководстве мы показали, как реализовать и запустить простой тест JUnit с аннотацией @Test .

Подробнее о структуре JUnit можно узнать в этом посте , который содержит общее введение.

Весь код, использованный в примерах, доступен в проекте GitHub .