21 июля 2020 2649
В этой статье рассматриваются новые возможности предоставления параметров для модульного тестирования в JUnit 5 с помощью внедрения зависимостей. Мы расскажем, как максимально эффективно проводить тестирование, как использовать различные распознаватели параметров, как писать повторяющиеся и параметризованные тесты.
В этой статье рассматриваются новые возможности предоставления параметров для модульного тестирования в JUnit 5 с помощью внедрения зависимостей. Мы расскажем, как максимально эффективно проводить тестирование, как использовать различные распознаватели параметров, как писать повторяющиеся и параметризованные тесты.

1. Внедрение зависимостей в JUnit 5

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

ParameterResolver определяет API для расширений тестов, которым необходимо динамически распознавать параметры во время выполнения. Если конструктор классов, метод теста или метод жизненного цикла принимает параметр, этот параметр необходимо распознать во время выполнения с помощью зарегистрированного ParameterResolver. Можно внедрить любое необходимое число параметров в любом необходимом порядке.

В настоящее время существует три встроенных распознавателя, однако другие распознаватели параметров должны быть прямо задействованы посредством регистрации соответствующих расширений с помощью @ExtendWith. Автоматически регистрируются следующие распознаватели параметров:

  • TestInfoParameterResolver: Если параметр конструктора или метода имеет тип TestInfo, TestInfoParameterResolver предоставляет экземпляр TestInfo,соответствующий текущему контейнеру или тесту как значению параметра. TestInfo — это класс, объекты которого используются для внедрения информации о текущем выполняемом тесте или контейнере в методы @Test, @BeforeEach, @AfterEach, @BeforeAll и @AfterAll. TestInfo можно затем использовать для получения информации о текущем контейнере или тесте, такой как отображаемое имя, класс теста, метод теста и связанные с ними теги. Отображаемое имя — это либо техническое имя, например имя тестового класса или метода, либо произвольное имя, настраиваемое через @DisplayName. В Примере 1 (Listing 1) показано, как использовать параметр TestInfo в качества аргумента конструктора и аннотированных методов.
  • listing_1
    Затем аннотированный метод @BeforeEach выполняется перед каждым тестом. Он имеет внедренный параметр TestInfo и подтверждает, что отображаемое имя является ожидаемым, т.е. либо именем метода, либо именем, указанным аннотацией @DisplayName (2).

    Оба теста имеют внедренный параметр TestInfo. Каждый из них подтверждает, что отображаемое имя является ожидаемым, т.е. либо именем метода для первого теста (3), либо именем, указанным аннотацией @DisplayName для второго теста (4).

    Напомним, что встроенный TestInfoParameterResolver предоставляет экземпляр TestInfo соответствующий текущему контейнеру или тесту как значение для ожидаемых параметров конструктора и методов.

  • TestReporterParameterResolver. Если параметр конструктора или метода имеет тип TestReporter, то TestReporterParameterResolver предоставляет экземпляр TestReporterTestReporter — это функциональный интерфейс, и поэтому может использоваться как цель присваивания для лямбда-выражения или ссылки метода. Паратметры типа TestReporter можно внедрить в методы тестовых классов, аннотированных как @BeforeEach, @AfterEach и @Test. TestReporter можно использовать для публикации дополнительных данных о выполнении текущего теста. В Примере 2 (Listing 2) показано, как использовать параметр TestReporter в качества аргумента аннотированных методов @Test.
  • listing_2
    В этом примере параметр TestReporter внедряется в три метода.

    В первом методе он используется для публикации единственного вводимого значения (1).

    Во втором методе он используется для публикации пары ключ-значение (2).

    В третьем методе мы конструируем карту (3), затем вводим в нее две пары ключ-значение (4) и используем его для публикации сконструированный карты (5).

    Напомним, что встроенный TestReporterParameterResolver предоставляет экземпляр TestReporter, необходимый для публикаций записей. Результат выполнения этого теста показан ниже.

    test_result

  • RepetitionInfoParameterResolver. Если параметр метода в методе @RepeatedTest, @BeforeEach или @AfterEach имеет тип RepetitionInfo, то RepetitionInfoParameterResolver предоставляет экземпляр RepetitionInfo. В этом случае RepetitionInfo можно использовать для получения информации о текущем повторе и общем числе повторов для соответствующего @RepeatedTest. RepetitionInfoParameterResolver не регистрируется вне контекста @RepeatedTest. О повторяющихся тестах мы более подробно поговорим в следующем разделе и приведем соответствующие примеры.

Автор Catalin Tudose, Java and Web Technologies Expert

Продолжение статьи по ссылке

Последние статьи в блоге

Платформа сертификации IBS признана лучшим digital-решением для корпоративного обучения

Центр сертификации IBS стал обладателем Гран-при премии «Смарт пирамида» — одной из самых престижных российских премий за достижения в области обучения и развития человеческого капитала.

20 декабря 2024

Учебный центр IBS получил сертификат ГОСТ Р ИСО 9001-2015

В октябре 2024 года Учебный центр IBS получил сертификат соответствия ГОСТ Р ИСО 9001-2015. Это важное достижение подтверждает, что мы придерживаемся высоких стандартов качества и результативно управляем образовательными процессами организации.

19 декабря 2024

9 курсов со скидкой до 50%

Друзья, в январе стартует 9 курсов, обучение на которых можно купить со скидкой до 50%*! 

15 декабря 2024

8 заблуждений про тестирование

Тестирование программного обеспечения окружено множеством заблуждений. Эти стереотипы нередко приводят к недопониманию его реальной роли и важности для успешного создания продуктов. Рассмотрим восемь самых распространенных мифов о тестировании и объясним, почему они не соответствуют действительности.

15 декабря 2024

Путь к Fullstack-тестировщику: что нужно знать о ручном и автоматизированном тестировании?

Тестирование программного обеспечения — одна из самых востребованных областей в IT. И часто новички и даже опытные специалисты, желающие строить свою карьеру в этом направлении, часто сталкиваются с вопросом: какое тестирование выбрать — ручное, автоматизированное или Fullstack? У каждого из этих направлений свои особенности, преимущества и требования к знаниям. В этой статье рассмотрим каждое из направлений, их плюсы и минусы, области применения и навыки, необходимые для успеха.

15 декабря 2024

Совет по развитию сертификации ИТ-специалистов при АПКИТ аккредитовал «Платформу сертификации IBS»

Директор департамента обучения и развития IBS Владимир Гернер участвовал в заседании Совета по сертификации ИТ-специалистов при АПКИТ.

Новости Жизнь компании
08 октября 2024

Java-сертификация: IBS в сравнении с Oracle

Игорь Судакевич рассказывает, почему сертификаты могут стать важным инструментом для достижения карьерных целей.

Новости
04 октября 2024

Исследование IBS: число новых ИТ-решений в реестре ПО выросло в 2023 году более чем на треть

Анализируем ситуацию на рынке российского ПО.

Жизнь компании
01 октября 2024

6 суперспособностей Fullstack-тестировщиков, которые напоминают навыки животных

Читайте о скиллах, которые делают тестировщиков востребованными на рынке труда.

27 сентября 2024

5 мифов о системных аналитиках

Вместе с Екатериной Тихомировой, специалистом по системному и бизнес-анализу, разбираемся, чем занимаются системные аналитики.

20 сентября 2024

Методология 12 факторов: как успешно разрабатывать облачные приложения

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

12 сентября 2024

Баги, которые стали фичами

Многие вещи, которые мы используем ежедневно, были случайно открыты. В честь дня тестировщика рассказываем про 5 багов, которые стали фичами.

09 сентября 2024

Шаблоны облачного проектирования

Читайте про наиболее популярные шаблоны облачного проектирования: шаблон Bulkhead и шаблон Sidecar.

06 сентября 2024

Бесплатные мини-курсы ко Дню знаний

Друзья, поздравляем с Днём знаний! Желаем любопытства, открытий и новых побед!

02 сентября 2024

5 курсов со скидкой 30%

Друзья, в сентябре стартует 5 курсов со скидкой 30%*

29 августа 2024

Исследование IBS: на одну вакансию в Java-разработке приходится 4 резюме

По данным исследования рекрутингового центра IBS, наибольшая конкуренция среди соискателей наблюдается среди Python-разработчиков: на одну вакансию приходится 10 резюме. В менее конкурентной среде находятся Java-разработчики (4 резюме на одну вакансию). Самыми дефицитными являются специалисты по языку Go: менее 2 резюме на одну вакансию.

28 августа 2024

Индексирование баз данных в PostgreSQL: погружение в тему

В продолжение серии статей об устройстве системы управления базами данных (СУБД) PostgreSQL (раз, два) смотрим, как ускорить выполнение запросов к базе данных с помощью индексов.

28 августа 2024

Книги для системных и бизнес-аналитиков, а также будущих и нынешних архитекторов

Наш коллега, архитектор информационных систем Сергей Политыко, поделился полезными книжными рекомендациями.

Жизнь компании
19 августа 2024

Сценарии кибератак с использованием ИИ. Внутренний периметр.

Кибератаки, направленные на внутренние периметры организаций, становится особенно актуальной темой. Внутренние атаки могут происходить как от злоумышленников с доступом к ресурсам, так и извне, используя уязвимости внутренней инфраструктуры. Использование ИИ в таких атаках позволяет автоматизировать и улучшить процесс поиска уязвимостей, создать вредоносный код и разработать методы социальной инженерии, что увеличивает скорость и масштаб атак. Расскажем про сценарии таких атак подробнее.

16 августа 2024

Сценарии кибератак с использованием ИИ. Внешний периметр

Сценарии кибератак по внешнему периметру представляют собой модели и методы, которые злоумышленники используют для незаконного доступа к информационным системам и данным компаний через их внешние интерфейсы и сети. Это как если бы ваша компания была неприступной крепостью, а за ее воротами стояла бы армия хорошо обученных солдат-магов, которые способны разрушить крепость по щелчку пальцев. Вы уверены, что ваши высокие стены и глубокие рвы вас спасут от подобной армии?

09 августа 2024

Не нашли, что искали? — Просто напишите, и мы поможем

Продолжая, я подтверждаю, что ознакомлен с Условиями использования и Порядком обработки персональных данных
Корпоративное обучение Оценка персонала Сертификация О нас Стань тренером Блог
Пользователь только что записался на курс ""
Спасибо!
Форма отправлена успешно.