Dependency Injection в JUnit5
Интерфейс ParameterResolver
Интерфейс ParameterResolver
Встроенные резолверы
TestReporterParameterResolver
TestReporter
RepetitionInfoParameterResolver
RepetitionInfo
Класс DynamicTest
@TestFactory
@TestFactory
BlackBox Testing vs WhiteBox Testing
Интеграция с Mockito
Классификация Test Doubles
UML Sequence Diagram
184.53K
Category: programmingprogramming

Dependency Injection в JUnit5. Интерфейс ParameterResolver

1. Dependency Injection в JUnit5

2. Интерфейс ParameterResolver

Входит в экспериментальный API.
Обеспечивает динамическую привязку (resolving) параметров на
этапе исполнения.
Имплементации необходимо регистрировать.
Позволяет инжектировать любое число параметров в любом
требуемом порядке.

3. Интерфейс ParameterResolver

Поддерживает constructor injection.
Поддерживает method injection в методах со след.аннотациями:
- @Test
- @TestFactory
- @BeforeEach, @AfterEach, @BeforeAll или @AfterAll

4. Встроенные резолверы

Зарегистрированы и активированы по умолчанию:
- TestInfoParameterResolver
- TestReporterParameterResolver
- RepetitionInfoParameterResolver
Все прочие резолверы параметров надо активировать путем
регистрации соответствующих расширений через @ExtendWith.

5. TestReporterParameterResolver

Служит для инжекции объекта типа TestReporter в тот или иной метод.
Объект TestReporter может применяться для публикации дополнительных
сведений о текущем тесте.

6. TestReporter

Рекомендован к использованию, когда надо передать информацию в каналы stdout или stderr.
Эта информация поступает в метод TestExecutionListener.reportingEntryPublished() и может обрабатываться
средствами IDEs или включаться в отчеты.
Методы:
-
void publishEntry(Map<String, String> record)
-
void publishEntry(String key, String value)
-
void publishEntry(String key)

7. RepetitionInfoParameterResolver

Инжектирует объект типа RepetitionInfo в методы, маркированные аннотациями
@RepeatedTest, @BeforeEach или @AfterEach.
Зарегистрирован по умолчанию, но работает только в контексте @RepeatedTest.
Когда объект RepetitionInfo используется в качества параметра @BeforeEach- или @AfterEach-метода, все
тестовые методы должны иметь аннотацию @RepeatedTest.

8. RepetitionInfo

Применяется для извлечения информации:
- о текущей тестовой итерации
- о числе итераций, заданных для соответствующего @RepeatedTest-метода
Методы:
-
int getCurrentRepetition()
-
int getTotalRepetitions()

9. Класс DynamicTest

10. @TestFactory

Эта аннотация служит для динамического создания тестов.
Входит в экспериментальный API.
Аннотированный метод должен:
-
возвращать объект типа Stream<DynamicTest>, Collection<DynamicTest>, Iterable<DynamicTest> или
Iterator<DynamicTest>.
-
быть нестатическим.

11. @TestFactory

Для генерации конкретного теста можно воспользоваться следующим методом:
-
static DynamicTest dynamicTest(
String displayName, Executable executable)
displayName: индицируемое имя метода.
executable: тестовая бизнес-логика.

12. BlackBox Testing vs WhiteBox Testing

BlackBox-тестирование
Основано на спецификации модуля
Охватывает заявленный контракт
Не выявляет ошибки имплементации
WhiteBox-тестирование
Основано на коде
Охватывает закодированное поведение
Не выявляет пропущенные сценарии

13. Интеграция с Mockito

14. Классификация Test Doubles

Dummy
objects
Test
stubs
Mock
objects
Test
stubs
Mock
objects
Dummy
objects
Test
Doubles
Fake
objects
Test
spies
Сложность
Test
spies
Fake
objects

15. UML Sequence Diagram

Unit Test
Тестируемый объект
Объект-имитатор
(mock)
SimplePricingService
PricingRepository
getHighestPricedTrade()
getPriceForTrade()
наивысшая цена
цена
English     Русский Rules