Наступні інструкції підтримуються при використанні в поєднанні з SpringExtension та JUnit Jupiter (тобто моделлю програмування в JUnit 5):

@SpringJUnitConfig

@SpringJUnitConfig – це складова інструкція, яка об'єднує @ExtendWith(SpringExtension.class) з JUnit Jupiter з @ContextConfiguration із Spring TestContext Framework. Її можна використовувати на рівні класу як заміну @ContextConfiguration. Що стосується параметрів конфігурації, єдина різниця між анотаціями @ContextConfiguration та @SpringJUnitConfig полягає в тому, що в анотації @SpringJUnitConfig класи компонентів можуть бути оголошені з атрибутом value.

У цьому прикладі показано, як використовувати інструкцію @SpringJUnitConfig для завдання конфігураційного класу:

Java
@SpringJUnitConfig(TestConfig.class)  class ConfigurationClassJUnitJupiterSpringTests { // тіло класу... }
  1. Задаємо клас конфігурації.
Kotlin
@SpringJUnitConfig (TestConfig::class)  class ConfigurationClassJUnitJupiterSpringTests { // тіло класу... }
  1. Задаємо клас конфігурації.

У наступному прикладі показано, як використовувати анотацію @SpringJUnitConfig для розташування конфігураційного файлу:

Java
@SpringJUnitConfig(locations = "/test-config.xml")  class XmlJUnitJupiterSpringTests { // тіло класу... }
  1. Задаємо розташування конфігураційного файлу.
Kotlin
@SpringJUnitConfig(locations = ["/test-config.xml"])  class XmlJUnitJupiterSpringTests { // тіло класу... }
  1. Задаємо розташування конфігураційного файлу.

Детальнішу інформацію див. у розділі "Керування контекстом", а також у javadoc за @SpringJUnitConfig та @ContextConfiguration.

@SpringJUnitWebConfig

@SpringJUnitWebConfig – це складова інструкція, яка об'єднує інструкцію @ExtendWith(SpringExten. ) з JUnit Jupiter з анотаціями @ContextConfiguration та @WebAppConfiguration із Spring TestContext Framework. Її можна використовувати на рівні класу як заміну анотацій @ContextConfiguration та @WebAppConfiguration. Що стосується параметрів конфігурації, єдина різниця між анотаціями @ContextConfiguration та @SpringJUnitWebConfig полягає в тому, що в анотації @SpringJUnitWebConfig компонентні класи можуть бути оголошені з використанням атрибуту value. Крім того, перевизначити атрибут value з анотації @WebAppConfiguration можна виключно за допомогою атрибуту resourcePath в анотації @SpringJUnitWebConfig.

У цьому прикладі показано, як використовувати анотацію @SpringJUnitWebConfig для завдання конфігураційного класу:

Java
@SpringJUnitWebConfig(TestConfig.class)  class ConfigurationClassJUnitJupiterSpringWebTests { // тіло класу... }
  1. Задаємо клас конфігурації.
Kotlin
@SpringJUnitWebConfig(TestConfig::class)  class ConfigurationClassJUnitJupiterSpringWebTests { // тіло класу... }
  1. Задаємо клас конфігурації.

У наступному прикладі показано, як використовувати анотацію @SpringJUnitWebConfig для завдання розташування файлу конфігурації:

Java
@SpringJUnitWebConfig(locations = "/test-config.xml")  class XmlJUnitJupiterSpringWebTests { // тіло класу ... }
  1. Задаємо розташування конфігураційного файлу.
Kotlin
@SpringJUnitWebConfig(locations = ["/test-config.xml"])  class XmlJUnitJupiterSpringWebTests { // тіло класу... }
  1. Задаємо розташування конфігураційного файлу.

Детальнішу інформацію див. у розділі "Керування контекстом", а також у javadoc по @SpringJUnitWebConfig, @ContextConfiguration та @WebAppConfiguration.

@TestConstructor

@TestConstructor – це анотація рівня типу, яка використовується для налаштування того, як параметри конструктора тестового класу будуть автоматично визначені та пов'язані з компонентів у ApplicationContext тесту.

Якщо анотація @TestConstructor не присутня або присутня через мета-анотацію у тестовому класі, буде використовуватися режим автоматичного виявлення та зв'язування тестового конструктора за умовчанням. Докладніше про те, як змінити режим за замовчуванням, див. нижче. Зверніть увагу, що локальне оголошення анотації @Autowired для конструктора має пріоритет над анотацією @TestConstructor та режимом за замовчуванням.

Зміна режиму автоматичного виявлення та зв'язування тестового конструктора за замовчуванням

Режим автоматичного виявлення та зв'язування тестового конструктора за замовчуванням можна змінити, встановивши системну властивість spring.test.constructor.autowire.mode з JVM на значення all. Крім того, режим за замовчуванням можна встановити через механізм SpringProperties.

Починаючи з Spring Framework 5.3, режим за замовчуванням також може бути налаштований як параметр конфігурації JUnit Platform.

Якщо властивість spring.test.constructor.autowire.mode не встановлена, конструктори тестових класів не будуть автоматично виявлятися і зв'язуватися. тільки у поєднанні з SpringExtension для використання з JUnit Jupiter. Зверніть увагу, що SpringExtension часто реєструється автоматично – наприклад, при використанні анотацій @SpringJUnitConfig та @SpringJUnitWebConfig або різних пов'язаних із тестуванням анотацій із Spring Boot Test .

@NestedTestConfiguration

@NestedTestConfiguration – це анотація на рівні типів, яка використовується для налаштування того , яким чином тестові конфігураційні анотації в Spring обробляються всередині ієрархії класів для внутрішніх тестових класів. супертипів або в ієрархії його об'ємних класів, то буде використовуватися режим спадкування об'ємної конфігурації за умовчанням. Докладніше про те, як змінити режим за замовчуванням, див. нижче.

Зміна режиму спадкування об'ємної конфігурації за умовчанням

За умовчанням режим спадкування об'ємної конфігурації - INHERIT, але його можна змінити, встановивши системну властивість spring.test.enclosing.configuration з JVM в OVERRIDE. Як варіант, режим за замовчуванням можна встановити через механізм SpringProperties.

Spring TestContext Framework підтримує семантику анотації @NestedTestConfiguration для наступних анотацій.

Використання анотації @NestedTestConfiguration зазвичай має сенс тільки у поєднанні з поміченими анотацією тестовими класами з JUnit Jupiter; однак можуть існувати й інші тестові фреймворки з підтримкою Spring та вкладених тестових класів, які використовують цю анотацію.

Див. розділ "Конфігурація тестового класу з анотацією @Nested" для ознайомлення з прикладом та отримання більш детальної інформації.

@EnabledIf

Інструкція @ EnabledIf використовується для сигналізації про те, що анотований тестовий клас із JUnit Jupiter або тестовий метод активований і повинен виконуватися, якщо зазначене expression виявляється true. Зокрема, якщо вираз має значення Boolean.TRUE або String дорівнює true (випадок ігнорування), тест активується. При застосуванні на рівні класу, всі методи тестування всередині цього класу також автоматично активуються за замовчуванням. a href="https://javarush.com/quests/lectures/questspring.level01.lecture57#expressions">Spring Expression Language (SpEL). Приклад: @EnabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")

  • Плейсхолдер для властивості, доступної в Environment фреймворку Spring. Приклад: @EnabledIf("${smoke.tests.enabled}")

  • Текстовий літерал. Приклад: @EnabledIf("true")

  • Зверніть увагу, однак, що текстовий літерал, який не є результатом динамічного дозволу плейсхолдера властивості, має нульову практичну цінність, оскільки анотація @EnabledIf("false") еквівалентна анотації @Disabled, а анотація @EnabledIf("true") логічно безглузда .

    Можна використовувати анотацію @EnabledIf як мета-анотацію для створення спеціальних складових анотацій. Наприклад, можна створити спеціальну інструкцію @EnabledOnMac таким чином:

    Java
    @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @EnabledIf( expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}", reason = "Enabled on Mac OS" ) public @interface EnabledOnMac {}
    Kotlin
    @Target(AnnotationTarget.TYPE, AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.RUNTIME ) @EnabledIf( expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}", reason = "Enabled on Mac OS" ) annotation class EnabledOnMac {}

    Аннотація @EnabledOnMac служить виключно як приклад того, що це можливо . Якщо у вас саме такий випадок, скористайтесь вбудованою підтримкою анотації @EnabledOnOs(MAC) у JUnit Jupiter.

    Починаючи з JUnit 5.7, JUnit Jupiter також має умовну інструкцію під назвою @EnabledIf. Таким чином, якщо вам потрібно використовувати підтримку анотації @EnabledIf у Spring, переконайтеся, що ви імпортуєте тип анотації з правильного пакета.

    @DisabledIf

    Аннотація @DisabledIf використовується для сигналізації про те, що анотований тестовий клас з JUnit Jupiter або тестовий метод заборонений і не повинен виконуватися, якщо надане вираз виявляється true. Зокрема, якщо вираз має значення Boolean.TRUE або String дорівнює true (випадок ігнорування), тест забороняється. При застосуванні на рівні класу всі тестові методи в цьому класі також автоматично забороняються. "https://javarush.com/quests/lectures/questspring.level01.lecture57#expressions">Spring Expression Language (SpEL). Приклад: @DisabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")

  • >Плейсхолдер для властивостей, доступних у Environment фреймоврка Spring. Приклад: @DisabledIf("${smoke.tests.disabled}")

  • Текстовий літерал. Приклад: @DisabledIf("true")

  • Зверніть увагу, однак, що текстовий літерал, який не є результатом динамічного дозволу плейсхолдера властивості, має нульову практичну цінність, оскільки анотація @DisabledIf("true") еквівалентна анотації @Disabled, а анотація @DisabledIf("false") логічно безглузда .

    Можна використовувати анотацію @DisabledIf як мета-анотацію для створення спеціальних складових анотацій. Наприклад, можна створити спеціальну інструкцію @DisabledOnMac таким чином:

    Java
    @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @DisabledIf( expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}", reason = "Disabled on Mac OS" ) public @interface DisabledOnMac {}
    Kotlin
    @Target(AnnotationTarget.TYPE, AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.RUNTIME ) @DisabledIf( expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}", reason = "Disabled on Mac OS" ) annotation class DisabledOnMac {}

    Аннотація @DisabledOnMac служить виключно як приклад того, що це можливо . Якщо у вас саме такий випадок, скористайтеся вбудованою підтримкою анотації @DisabledOnOs(MAC) в JUnit Jupiter. 5.7, JUnit Jupiter також має умовну анотацію під назвою @DisabledIf. Отже, якщо вам потрібно використовувати підтримку анотації @DisabledIf у Spring, переконайтеся, що імпортуєте тип анотації з правильного пакета .