Наступні анотації підтримуються при використанні в поєднанні з SpringExtension
та JUnit Jupiter (тобто моделлю програмування в JUnit 5):
@SpringJUnitConfig
@SpringJUnitConfig
— це складова
анотація, яка об'єднує @ExtendWith(SpringExtension.class)
з JUnit Jupiter з
@ContextConfiguration
зі Spring TestContext Framework. Її можна використовувати на рівні класу як заміну
@ContextConfiguration
. Що стосується параметрів конфігурації, єдина різниця між анотаціями @ContextConfiguration
та @SpringJUnitConfig
полягає в тому, що в анотації @SpringJUnitConfig класи компонентів можуть
бути оголошені з атрибутом value
.
У цьому прикладі показано, як використовувати анотацію
@SpringJUnitConfig
для зазначення конфігураційного класу:
@SpringJUnitConfig(TestConfig.class)
class ConfigurationClassJUnitJupiterSpringTests {
// тіло класу...
}}
- Зазначаємо клас конфігурації.
@SpringJUnitConfig(TestConfig::class)
class ConfigurationClassJUnitJupiterSpringTests {
// тіло класу...
}
- Зазначаємо клас конфігурації.
У наступному прикладі показано, як використовувати анотацію @SpringJUnitConfig
для розташування
конфігураційного файлу:
@SpringJUnitConfig(locations = "/test-config.xml")
class XmlJUnitJupiterSpringTests {
// тіло класу...
}
- Зазначаємо розташування конфігураційного файлу.
@SpringJUnitConfig(locations = ["/test-config.xml"])
class XmlJUnitJupiterSpringTests {
// тіло класу...
}
- Зазначаємо розташування конфігураційного файлу.
Детальнішу інформацію див. у розділі "Керування контекстом", а
також у javadoc за @SpringJUnitConfig
та @ContextConfiguration
.
@SpringJUnitWebConfig
@SpringJUnitWebConfig
— це складова анотація, яка об'єднує анотацію @ExtendWith(SpringExtension.class)
із JUnit Jupiter з анотаціями @ContextConfiguration
та @WebAppConfiguration
із
Spring TestContext Framework. Її можна використовувати на рівні класу як заміну анотацій
@ContextConfiguration
та @WebAppConfiguration
. Що стосується параметрів конфігурації, єдина різниця між анотаціями @ContextConfiguration
та @SpringJUnitWebConfig
полягає в тому, що в анотації @SpringJUnitWebConfig
компонентні класи можуть бути оголошені з використанням атрибуту value
. До того ж, перевизначити
атрибут value з анотації @WebAppConfiguration
можна виключно за допомогою атрибуту resourcePath в
анотації @SpringJUnitWebConfig
.
У цьому прикладі показано, як використовувати анотацію @SpringJUnitWebConfig
для зазначення
конфігураційного класу:
@SpringJUnitWebConfig(TestConfig.class)
class ConfigurationClassJUnitJupiterSpringWebTests {
// тіло класу...
} }
- Зазначаємо клас конфігурації.
@SpringJUnitWebConfig(TestConfig::class)
class ConfigurationClassJUnitJupiterSpringWebTests {
// тіло класу...
}
- Зазначаємо клас конфігурації.
У наступному прикладі показано, як використовувати анотацію @SpringJUnitWebConfig
для зазначення
розташування файлу конфігурації:
@SpringJUnitWebConfig(locations = "/test-config.xml")
class XmlJUnitJupiterSpringWebTests {
// тіло класу...
}
- Зазначаємо розташування конфігураційного файлу.
@SpringJUnitWebConfig(locations = ["/test-config.xml"])
class XmlJUnitJupiterSpringWebTests {
// тіло класу...
}
- Зазначаємо розташування конфігураційного файлу.
Детальнішу інформацію див. у розділі "Керування
контекстом", а також у 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
не встановлена, конструктори тестових
класів не будуть автоматично виявлятися і зв'язуватися.
Починаючи зі Spring Framework 5.2, анотація @TestConstructor підтримується тільки у поєднанні з
SpringExtension
для використання з JUnit Jupiter. Зверни увагу, що SpringExtension
часто реєструється
автоматично: наприклад, при використанні анотацій @SpringJUnitConfig
та
@SpringJUnitWebConfig
або різних пов'язаних із тестуванням анотацій із Spring Boot Test.
@NestedTestConfiguration
@NestedTestConfiguration
— це анотація на рівні типів, яка використовується для налаштування того,
яким чином тестові конфігураційні анотації в Spring обробляються всередині ієрархії класів для внутрішніх
тестових класів. Якщо анотация @NestedTestConfiguration
не присутсня або присутня через метаанотацію в
тестовому класі, в ієрархії його супертипів або в ієрархії його об'ємних класів, то буде використовуватися режим
спадкування
об'ємної конфігурації за замовчуванням. Докладніше про те, як змінити режим за замовчуванням, див. нижче.
За замовчуванням режим спадкування об'ємної конфігурації — 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
(випадок ігнорування), тест активується. При застосуванні на
рівні класу, всі методи тестування всередині цього класу також автоматично активуються за замовчуванням.
Вирази можуть мати будь-яку з таких форм:
Вирази на мові 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
таким чином:
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@EnabledIf(
expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
reason = "Enabled on Mac OS"
)
public @interface EnabledOnMac {}
@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
таким чином:
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@DisabledIf(
expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
reason = "Disabled on Mac OS"
)
public @interface DisabledOnMac {}
@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, переконайся, що імпортуєш тип анотації з правильного пакета.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ