Архитектура JUnit 5. Часть 6
Это последняя часть нашей серии статей об архитектуре JUnit 5. Здесь мы рассмотрим используемый в JUnit 5 подход. При использовании собственных расширений JUnit 5 обеспечивает такие же возможности, как JUnit 4 при использовании правил. Код на основе стиля декларативных аннотаций становится более компактным. Сначала мы определяем класс CustomExtension, который используется в качестве аргумента аннотации @ExtendWith для тестируемого класса.
В Примере 9 мы делаем следующее:
-
Декларируем CustomExtension как реализацию интерфейсов AfterEachCallback и BeforeEachCallback (1’).
-
Переопределяем метод afterEach, который будет выполняться после каждого тестового метода из тестового класса, расширенного с помощью CustomExtension (2’).
- Переопределяем метод beforeEach, который будет выполняться перед каждым тестовым методом из тестового класса, расширенного с помощью CustomExtension (3’).
В Примере 10 мы делаем следующее:
-
Расширяем JUnit5CustomExtensionTester с помощью класса CustomExtension (1’).
-
Создаем метод myCustomRuleTest и добавляем к нему аннотацию @Test (2).
Отметим очевидную разницу в ясности кода и длине кода между JUnit 4 и JUnit 5. В JUnit 4 нужно использовать три класса, а JUnit 5 нужно только два класса. Код будет выполняться до и после того, как каждый тестовый метод будет изолирован в специальном методе с ясным наименованием. Что касается тестового класса, то нужно только добавить к нему аннотацию @ExtendWith.
Модель расширений в JUnit 5 можно также использовать для постепенной замены средств запуска из JUnit 4. Для расширений, которые уже созданы, процесс переноса будет простым. Например:
- Для переноса тестов Mockito необходимо в тестовом классе заменить аннотацию @RunWith(MockitoJUnitRunner.class) на аннотацию @ExtendWith(MockitoExtension.class).
-
Для переноса тестов Spring необходимо в тестовом классе заменить аннотацию @RunWith(SpringJUnit4ClassRunner.class) на аннотацию @ExtendWith(MockitoExtension.class).
-
На момент написания этой статьи для тестов Arquillian расширение еще не создано.
Заключение
В статье рассмотрена новая архитектура JUnit 5, в которой устранены недостатки предыдущей версии JUnit 4. Особое внимание было уделено применению модульного подхода в JUnit 5. Кроме того, показаны возможности перехода с кода JUnit 4 на код JUnit 5, в том числе переход с правил на расширения и переход с настраиваемых правил на настраиваемые расширения.
Автор Catalin Tudose, Java and Web Technologies Expert
Расскажи друзьям: