Төмөнкү аннотациялар 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`түн @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
менен гана колдоого алынат.
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
болуп калса. Атап айтканда, эгерде expression мааниси Boolean.TRUE
же String
true
менен барабар болсо (кейс көңүлгө алынбайт), тест иштетилет. Класс деңгээлинде колдонгондо, бул класстын ичиндеги бардык тесттик методдор да демейки боюнча автоматтык түрдө иштетилет.
Expression төмөнкү формалардын кайсынысы болбосун ала алат:
-
Spring Expression Language (SpEL) пайдалануу менен түзүлгөн expression. Мисалы:
@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 = "Mac OS'те иштетилген"
)
public @interface EnabledOnMac {}
@Target(AnnotationTarget.TYPE, AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
@EnabledIf(
expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
reason = "Mac OS'те иштетилген"
)
annotation class EnabledOnMac {}
@EnabledOnMac аннотациясы
бул мүмкүн экендигинин гана мисалы катары кызмат кылат. Эгер сизде ушундай учур болсо, JUnit Jupiter'деги @EnabledOnOs(MAC) аннотациясынын орнотулган колдоосун колдонуңуз.
JUnit 5.7`дан баштап, JUnit Jupiter`де @EnabledIf
аттуу шарттуу аннотация дагы бар. Ошондуктан, эгерде сизге анын Springдеги колдоосу керек болсо, анда туура пакеттерден аннотациянын типин импорттогонуңузга көз каранды болуңуз.
@DisabledIf
@DisabledIf
аннотациясы аннотацияланган JUnit Jupiter тесттик класс же тест методу иштетилген эмес жана аткарылбашы керек экенин билдирүү үчүн колдонулат, эгерде берүүчү expression
true
деп табылса. Атап айтканда, expression мааниси Boolean.TRUE
же String
true
менен барабар болсо (кейс көңүлгө алынбайт), тест иштетилбейт. Класс деңгээлинде колдонгондо, бул класстын бардык тесттик методдору да демейки боюнча автоматтык түрдө иштетилбей калат.
Expression төмөнкү формалардын кайсынысы болбосун ала алат:
-
Spring Expression Language (SpEL) пайдалануу менен түзүлгөн expression. Мисалы:
@DisabledIf("#{systemProperties['os.name'].toLowerCase().contains('mac')}")
-
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 = "Mac OS'те иштетилбей калган"
)
public @interface DisabledOnMac {}
@Target(AnnotationTarget.TYPE, AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
@DisabledIf(
expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
reason = "Mac OS'те иштетилбей калган"
)
annotation class DisabledOnMac {}
@DisabledOnMac аннотациясы
бул мүмкүн экендигинин гана мисалы катары кызмат кылат. Эгер сизде ушундай учур болсо, JUnit Jupiter'деги @DisabledOnOs(MAC) аннотациясынын орнотулган колдоосун колдонуңуз.
JUnit 5.7`дан баштап, JUnit Jupiter`де @DisabledIf
аттуу шарттуу аннотация дагы бар. Ошондуктан, эгерде сизге анын Springдеги колдоосу керек болсо, анда туура пакеттерден аннотациянын типин импорттогонуңузга көз каранды болуңуз.
GO TO FULL VERSION