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

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.