JUnit 5 @Test Аннотация
1. обзор
В этой статье мы кратко рассмотрим аннотацию JUnit@Test. Эта аннотация предоставляет мощный инструмент для проведения юнит-регрессионного тестирования.
2. Конфигурация Maven
Чтобы использоватьlatest version of JUnit 5, нам нужно добавить следующую зависимость Maven:
org.junit.jupiter
junit-jupiter-engine
5.1.0
test
Мы используем область видимостиtest, потому что не хотим, чтобы Maven включала эту зависимость в нашу окончательную сборку.
Поскольку плагин surefire по-прежнему не полностью поддерживает JUnit 5,we’ll also need to add a provider, который сообщает Maven, где найти наши тесты:
maven-surefire-plugin
2.19.1
org.junit.platform
junit-platform-surefire-provider
1.0.2
В нашей конфигурации мы будем использовать surefire 2.19.1, потому чтоat the time of writing, version 2.20.x is not compatible with the junit-platform-surefire-provider.
3. Тестируемый метод
Прежде всего, давайте создадим простой метод, который мы будем использовать в наших тестовых сценариях, чтобы продемонстрировать возможности аннотации@Test:
public boolean isNumberEven(Integer number) {
return number % 2 == 0;
}
Этот метод должен возвращатьtrue, если переданный аргумент является четным числом, иfalse в противном случае. А теперь давайте посмотрим, работает ли он должным образом.
4. Тестирование метода
Для нашего примера мы хотим специально проверить два сценария:
-
когда задано четное число, метод должен вернутьtrue
-
когда задано нечетное число, метод должен вернутьfalse
Это означает, что код реализации вызовет наш методisNumberEven с другими параметрами и проверит, что результат соответствует нашим ожиданиям.
In order for the tests to be recognized as such, we’ll add the @Test annotation. У нас может быть столько из них, сколько мы хотим в классе, но хорошей практикой является объединение только связанных. Также обратите внимание, чтоa test must not be private, nor may it return a value - в противном случае он будет проигнорирован.
Учитывая эти соображения, давайте напишем наши методы тестирования:
@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,the surefire plugin will go through all the annotated methods in the classes placed under src/test/java and execute them, что приведет к сбою сборки при возникновении каких-либо сбоев теста.
Если вы пришли из JUnit 4,be aware that in this version the annotation doesn’t accept any parameters. Чтобы проверить тайм-аут или возникшее исключение, мы бы вместо этого использовали утверждения:
@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 можно найти вthis post, где содержится общее введение.
Весь код, используемый в примерах, доступен вGitHub project.