Келесі аннотациялар SpringExtension
және JUnit Jupiter-пен (яғни JUnit 5 программалау моделінде) бірге қолданғанда қолданылады:
@SpringJUnitConfig
@SpringJUnitConfig
– бұл құрамдас аннотация, ол JUnit Jupiter-ден @ExtendWith(SpringExtension.class)
және Spring TestContext Framework-тан @ContextConfiguration
-ды біріктіреді. Оны @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 {
// класс денесі...
}
- Конфигурациялық файл орналасуын орнатамыз.
Көбірек ақпаратты "Контекстті басқару" бөлімінен және @SpringJUnitConfig
және @ContextConfiguration
бойынша javadoc-тан таба аласыз.
@SpringJUnitWebConfig
@SpringJUnitWebConfig
– бұл JUnit Jupiter-ден @ExtendWith(SpringExtension.class)
аннотациясын Spring TestContext Framework's @ContextConfiguration
және @WebAppConfiguration
аннотацияларымен біріктіретін құрамдас аннотация. Оны @ContextConfiguration
және @WebAppConfiguration
аннотацияларына балама ретінде класс деңгейінде қолдануға болады. Конфигурациялық параметрлерге қатысты, @ContextConfiguration
және @SpringJUnitWebConfig
аннотациялары арасындағы жалғыз айырмашылық – @SpringJUnitWebConfig
аннотациясында компоненттік кластар value
атрибутын қолдану арқылы жариялана алады. Бұған қоса, @WebAppConfiguration
аннотациясынан value
атрибутын тек @SpringJUnitWebConfig
аннотациясындағы resourcePath
атрибуты арқылы қайта анықтауға болады.
Төмендегі мысал конфигурациялық классты орнату үшін @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 {
// класс денесі...
}
- Конфигурациялық файл орналасуын орнатамыз.
Көбірек ақпаратты "Контекстті басқару", және @SpringJUnitWebConfig
, @ContextConfiguration
және @WebAppConfiguration
бойынша javadoc-тан таба аласыз.
@TestConstructor
@TestConstructor
– бұл тестік класстың конструктор параметрлері ApplicationContext
компоненттерінен автоматты түрде анықталып байланысы қалай қалыптасатынын баптау үшін қолданылатын аннотация.
Егер @TestConstructor
аннотациясы тестік класта болмаса немесе мета-аннотация арқылы қатынасса, әдепкі автоматты табу және байланыстыру режимі қолданылады. Әдепкі режимді қалай өзгерту керектігін төмендегі кеңестен қарауға болады. Бірақ, конструктор үшін жергілікті @Autowired
аннотациясы @TestConstructor
және әдепкі режимнен үнемі басымырақ екенін ескеріңіз.
Әдепкі автоматты табу және байланыстыру режимін JVM жүйесінен spring.test.constructor.autowire.mode
жүйелік қасиетін all
-ге орнату арқылы өзгертуге болады. Сонымен қатар, әдепкі режимді SpringProperties
механизмін қолдана отырып орнатуға болады.
Spring Framework 5.3-тен бастап, әдепкі режимді JUnit Platform конфигурациялық параметрі арқылы да баптауға болады.
Егер spring.test.constructor.autowire.mode
қасиеті орнатылмаған болса, тестік класстардың конструкторлары автоматты түрде табылмайды және байланыстырылмайды.
@TestConstructor
аннотациясы тек JUnit Jupiter-пен бірге қолдануға арналған
SpringExtension
бірге қолдау параллельінде. Бұл аннотация
@SpringJUnitConfig
және
@SpringJUnitWebConfig
немесе Spring Boot Test-пен байланыстырылған басқа тест аннотацияларын жиі автоматты түрде тіркейтінін ескеріңіз.
@NestedTestConfiguration
@NestedTestConfiguration
ішкі тест кластар үшін Spring конфигурациялық аннотациялардың иерархиясында қалай өңделетінін баптау үшін қолданылатын тип деңгейіндегі аннотация.
Егер @NestedTestConfiguration
аннотациясы тестік класта болмаса немесе мета-аннотация арқылы қатынасса, оның супертип иерархиясында немесе көлемді класстар иерархиясында, әдепкі көлемді конфигурацияның мұрагерлік режимі қолданылады. Әдепкі режимді қалай өзгерту керектігін төмендегі кеңестен қарауға болады.
Әдепкі көлемді конфигурацияның мұрагерлік режимі - INHERIT
, бірақ оны JVM жүйесінен spring.test.enclosing.configuration
жүйелік қасиетін OVERRIDE
-ке орнату арқылы өзгертуге болады. Сонымен қатар, әдепкі режимді SpringProperties
механизмін қолдана отырып орнатуға болады.
Spring TestContext Framework келесі аннотациялар үшін @NestedTestConfiguration
аннотациясының семантикасымен қолдау жасайды:
@NestedTestConfiguration
-ді қолдану, әдетте, JUnit Jupiter-ден
@Nested
белгіленген тест класстармен бірге мағынасы бар; алайда, бұл аннотацияны қолданатын Spring қолдауымен және салынған тест класстарымен басқа тест фреймворктар да болуы мүмкін.
"Аннотацияланған @Nested
тест классын конфигурациялау" бөлімінен мысалмен және қосымша ақпаратпен танысуға болады.
@EnabledIf
@EnabledIf
аннотациясы JUnit Jupiter дан аннотацияланған тест классының немесе тест әдісінің белсенді екенін және атқарылатындығын білдіру үшін қолданылады, егер берілген expression
мәні true
болса. Нақтырақ айтсақ, егер өрнек Boolean.TRUE
мағынасына ие болса немесе String
"true"-ге тең (регистрді елемеу), тест белсендіріледі. Класс деңгейінде қолданылғанда, осы класстағы барлық тест әдістері әдепкі бойынша автоматты түрде белсендіріледі.
Өрнектер келесі формалардың кез келгені болуы мүмкін:
-
Spring Expression Language (SpEL) тіліндегі өрнек. Мысал:
@EnabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")
-
Spring фреймворкінің
Environment
ішіндегі қолжетімді қасиет үшін плейсхолдер. Мысал:@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
тек мысал ретінде көрсетілген, оның мүмкін екендігін көрсету үшін. Егер сізде дәл осындай жағдай болса, JUnit Jupiter-де @EnabledOnOs(MAC)
аннотациясының кіріктірілген қолдауын пайдаланыңыз.
JUnit 5.7-тен бастап, JUnit Jupiter-де @EnabledIf
аталатын шартты аннотация да бар. Сондықтан, егер сізге Spring-де @EnabledIf
аннотациясын пайдалану қажет болса, аннотация типін дұрыс пакетінен импорттағаныңызға көз жеткізіңіз.
@DisabledIf
@DisabledIf
аннотациясы JUnit Jupiter дан аннотацияланған тест класының немесе тест әдісінің өшірілгенін және орындалмауы керектігін білдіру үшін қолданылады, егер берілген выражение
мәні true
болса. Нақтырақ айтсақ, егер өрнек Boolean.TRUE
мағынасына ие болса немесе String
"true"-ге тең (регистрді елемеу), тест өшіріледі. Класс деңгейінде қолданылғанда, осы кластағы барлық тест әдістері әдепкі бойынша автоматты түрде өшіріледі.
Өрнектер келесі формалардың кез келгені болуы мүмкін:
-
Spring Expression Language (SpEL) тіліндегі өрнек. Мысал:
@DisabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")
-
Spring фреймворкінің
Environment
ішіндегі қолжетімді қасиет үшін плейсхолдер. Мысал:@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
тек мысал ретінде көрсетілген, оның мүмкін екендігін көрсету үшін. Егер сізде дәл осындай жағдай болса, JUnit Jupiter-де @DisabledOnOs(MAC) аннотациясының кіріктірілген қолдауын пайдаланыңыз.
JUnit 5.7-тен бастап, JUnit Jupiter-де @DisabledIf
аталатын шартты аннотация да бар. Сондықтан, егер сізге Spring-де @DisabledIf
аннотациясын пайдалану қажет болса, аннотация типін дұрыс пакетінен импорттағаныңызға көз жеткізіңіз.
GO TO FULL VERSION