JavaRush /Курстар /All lectures for KK purposes /JUnit Jupiter Тест Аннотациялары

JUnit Jupiter Тест Аннотациялары

All lectures for KK purposes
Деңгей , Сабақ
Қол жетімді

Келесі аннотациялар SpringExtension және JUnit Jupiter-пен (яғни JUnit 5 программалау моделінде) бірге қолданғанда қолданылады:

@SpringJUnitConfig

@SpringJUnitConfig – бұл құрамдас аннотация, ол JUnit Jupiter-ден @ExtendWith(SpringExtension.class) және Spring TestContext Framework-тан @ContextConfiguration-ды біріктіреді. Оны @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. Конфигурациялық файл орналасуын орнатамыз.

Көбірек ақпаратты "Контекстті басқару" бөлімінен және @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 аннотациясын қалай қолданатынын көрсетеді:

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. Конфигурациялық файл орналасуын орнатамыз.

Көбірек ақпаратты "Контекстті басқару", және @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 қасиеті орнатылмаған болса, тестік класстардың конструкторлары автоматты түрде табылмайды және байланыстырылмайды.

Spring Framework 5.2-ден бастап, @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 аннотациясын келесі түрде жасауға болады:

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 тек мысал ретінде көрсетілген, оның мүмкін екендігін көрсету үшін. Егер сізде дәл осындай жағдай болса, 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 аннотациясын келесі түрде жасауға болады:

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 тек мысал ретінде көрсетілген, оның мүмкін екендігін көрсету үшін. Егер сізде дәл осындай жағдай болса, JUnit Jupiter-де @DisabledOnOs(MAC) аннотациясының кіріктірілген қолдауын пайдаланыңыз.

JUnit 5.7-тен бастап, JUnit Jupiter-де @DisabledIf аталатын шартты аннотация да бар. Сондықтан, егер сізге Spring-де @DisabledIf аннотациясын пайдалану қажет болса, аннотация типін дұрыс пакетінен импорттағаныңызға көз жеткізіңіз.

Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION