Статьи

JUnit 5 — Настройка

В ноябре 2015 года команда JUnit Lambda представила свой прототип . С тех пор проект переименовал себя в JUnit 5 и выпустил альфа-версию в феврале 2016 года. Мы рассмотрим его в серии коротких публикаций:

  • Настроить
  • основы
  • Архитектура
  • условия
  • впрыскивание

В этом разделе обсуждается настройка JUnit 5, чтобы вы могли писать код для нового API и запускать тесты в вашей IDE или с помощью инструмента сборки.

обзор

Большая часть того, что вы прочтете здесь, и многое другое можно найти в новом руководстве пользователя JUnit 5 . Обратите внимание, что он основан на альфа-версии и, следовательно, может быть изменен.

В самом деле, мы поощряем открывать проблемы или извлекать запросы, чтобы JUnit 5 мог улучшаться дальше. Пожалуйста, используйте эту возможность! Это наш шанс помочь JUnit помочь нам.

Этот пост будет обновляться по мере необходимости. Примеры кода, которые я здесь показываю, можно найти на Github .

Письменные тесты

API для написания тестов содержится в артефакте junit5-api. Включение его в ваш проект с вашим любимым инструментом сборки — все, что нужно для написания тестов.

  • Идентификатор группы : org.junit5
  • ID артефакта : junit5-api
  • Версия : 5.0.0-АЛЬФА

Чтобы было над чем поработать, давайте быстро создадим наш первый тест :

HelloWorldTest.java

01
02
03
04
05
06
07
08
09
10
11
12
package org.codefx.demo.junit5;
  
import org.junit.gen5.api.Test;
  
class HelloWorldTest {
  
    @Test
    void helloJUnit5() {
        System.out.println("Hello, JUnit 5.");
    }
  
}

Смотри, ма, нет публики! Круто, верно? Я не буду вдаваться в подробности, но в следующем посте мы обсудим это (и другие основы), так что следите за обновлениями.

Запуск тестов

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

JUnit 4 Runner

Тестовый запуск под названием JUnit5 можно использовать для запуска новых тестов в рамках запуска JUnit 4. Вы найдете его в собственном артефакте, который вы должны добавить в свой проект:

  • Идентификатор группы : org.junit5
  • Идентификатор артефакта : junit4-runner
  • Версия : 5.0.0-АЛЬФА

Бегун вызовет двигатель, который фактически запускает тесты JUnit 5. Движок также имеет свой собственный артефакт, который вы должны добавить:

  • Идентификатор группы : org.junit5
  • Идентификатор артефакта : junit5-engine
  • Версия : 5.0.0-АЛЬФА

Чтобы запустить все тесты в проекте, проще всего создать для них набор тестов:

1
2
3
4
5
6
7
8
9
package org.codefx.demo.junit5;
  
import org.junit.gen5.junit4.runner.JUnit5;
import org.junit.gen5.junit4.runner.Packages;
import org.junit.runner.RunWith;
  
@RunWith(JUnit5.class)
@Packages({ "org.codefx.demo.junit5" })
public class TestWithJUnit5 { }

Обратите внимание, что класс должен быть обычным тестовым классом JUnit 4, то есть он должен соответствовать общему соглашению об именах и должен быть общедоступным. @ Packages-annotation интерпретирует пакеты как иерархию, поэтому выполняет все тесты во всех пакетах с префиксом org.codefx.demo.junit5. При желании вы можете использовать тот же раннер непосредственно в тестовых классах JUnit 5; в этом случае они должны быть публичными.

Теперь мы закончили! Ваш любимый инструмент IDE и инструмент сборки будут с радостью запускать классы, помеченные @RunWith (JUnit5.class) и, следовательно, новые тесты JUnit 5.

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

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

Команда JUnit уже усердно работает над реализацией поддержки инструментов сборки для JUnit 5, то есть без обхода через JUnit 4. Начальный плагин Gradle и поставщик Maven Surefire уже работают и работают. Оба проекта планируется передать соответствующим сообществам в какой-то момент.

Для обоих есть примеры проектов ( Gradle , Maven ). Для более подробной информации обратитесь к руководству пользователя .

Командная строка для победы!

Если вам все это не по вкусу, попробуйте запустить консоль , которая позволит вам запускать тесты прямо из командной строки. Чтобы получить его, вы можете скачать этот ZIP .

К сожалению, это не работает из коробки . Мне пришлось выбросить упомянутые выше артефакты junit5-api и junit5-engine в lib и отредактировать определение пути к классу в скрипте в bin для CLASSPATH = $ APP_HOME / lib / *, чтобы оно работало.

Игнорируя дополнительные зависимости (например, от других тестовых библиотек), вы можете использовать его следующим образом:

Использование junit-консоли

1
2
3
4
5
6
# run all tests
junit-console -p ${path_to_compiled_test_classes} -a
# run a specific test
junit-console
    -p ${path_to_compiled_test_classes}
    org.codefx.demo.junit5.HelloWorldTest

Совместимость

Как вы могли заметить, JUnit 5 занимает новое пространство имен: org.junit.gen5. Это означает, что не будет конфликтов при использовании разных версий JUnit в одном проекте.

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

Тестовые библиотеки, такие как Hamcrest и AssertJ, которые взаимодействуют с JUnit через исключения, продолжат работать в новой версии. Проверьте полную версию HelloWorldTest для примера, использующего Mockito и AssertJ.

отражение

Для нашей установки JUnit 5 мы включили junit5-api, junit5-engine и junit4-runner в наш проект, написали первый минимальный тестовый пример и выполнили его как часть набора тестов JUnit 4.

В следующем посте будут рассмотрены основы написания тестов в JUnit 5.

Ссылка: JUnit 5 — Настройка от нашего партнера JCG Николая Парлога в блоге CodeFx .