Test Annotasiyaları

All lectures for AZ purposes
Səviyyə , Dərs
Mövcuddur

Spring Framework TestContext framework ilə əlaqəli olan modulyar və inteqrasiya testlərində istifadə edilə biləcək xüsusi annotasiya dəstini təqdim edir. Daha ətraflı məlumat üçün müvafiq javadoc-yə baxın, o cümlədən standart atribut dəyərləri, atribut ləqəbləri və digər məlumatlar.

Springdə test üçün aşağıdakı annotasiyalar mövcuddur:

@BootstrapWith

@BootstrapWith – Spring TestContext Framework-in başlanğıcının konfiqurasiya üçün sinif səviyyəsində bir annotasiyadır. Xüsusilə, xüsusi TestContextBootstrapper-i təyin etmək üçün @BootstrapWith istifadə edilə bilər. Daha ətraflı məlumat üçün TestContext framework-un başlaması bölməsinə baxın.

@ContextConfiguration

@ContextConfiguration inteqrasiya testləri üçün ApplicationContext-in yüklənməsi və konfiqurasiyası ilə bağlı sinif səviyyəsində metadataları müəyyən edir. Xüsusilə, @ContextConfiguration tətbiq kontekstinin resurslarını və ya kontekstin yüklənməsi üçün istifadə olunan komponent classes-ı elan edir.

Resurs yerləri adətən classpath-də yerləşən XML konfiqurasiya faylları və ya Groovy skriptlərindən ibarətdir, komponent siniflər isə adətən @Configuration annotasiyası ilə qeyd olunmuş siniflərdir. Lakin resurs yerləri fayl sistemindəki fayl və skriptlərə də istinad edə bilər və komponent siniflər @Component, @Service və s. ilə annotasiya olunmuş siniflər ola bilər. Daha ətraflı məlumat üçün “Komponent sinifləri” bölməsinə baxın.

Aşağıdakı nümunədə XML faylına istinad edən @ContextConfiguration annotasiyası göstərilir:

Java
@ContextConfiguration("/test-config.xml") 
class XmlApplicationContextTests {
    // sinifin bədəni...
}
  1. XML faylına istinad edirik.
Kotlin
@ContextConfiguration("/test-config.xml") 
class XmlApplicationContextTests {
    // sinifin bədəni...
}
  1. XML faylına istinad edirik.

Aşağıdakı nümunədə isə sinifə istinad edən @ContextConfiguration annotasiyası göstərilir:

Java
@ContextConfiguration(classes = TestConfig.class) 
class ConfigClassApplicationContextTests {
    // sinifin bədəni...
}
  1. Sinifə istinad edirik.
Kotlin
@ContextConfiguration(classes = [TestConfig::class]) 
class ConfigClassApplicationContextTests {
    // sinifin bədəni...
}
  1. Sinifə istinad edirik.

Bundan əlavə, resurs yerlərini və ya komponent siniflərini elan etməklə yanaşı, @ContextConfiguration istifadə edə bilərsiniz, ApplicationContextInitializer siniflərini də elan edə bilərsiniz. Aşağıda belə bir nümunə göstərilir:

Java
@ContextConfiguration(initializers = CustomContextInitializer.class) 
class ContextInitializerTests {
    // sinifin bədəni...
}
  1. İnitializer sinifini elan edirik.
Kotlin
@ContextConfiguration(initializers = [CustomContextInitializer::class]) 
class ContextInitializerTests {
    // sinifin bədəni...
}
  1. İnitializer sinifini elan edirik.

Həmçinin ContextLoader strategiyasını elan etmək üçün @ContextConfiguration istifadə edə bilərsiniz. Lakin, qeyd etmək lazımdır ki, çox vaxt yükleyicinin konfiqurasiyası tələb olunmur, çünki standart yükleyici initializers və ya resurs yerlərini və ya komponent classes-i dəstəkləyir.

Aşağıdakı nümunədə resurs yeri və özəl yükleyici birləşdirilmişdir:

Java
@ContextConfiguration(locations = "/test-context.xml", loader = CustomContextLoader.class) 
class CustomLoaderXmlApplicationContextTests {
    // sinifin bədəni...
}
  1. Həm resurs yeri, həm də xüsusi yükleyici konfiqurasiya edirik.
Kotlin
@ContextConfiguration("/test-context.xml", loader = CustomContextLoader::class) 
class CustomLoaderXmlApplicationContextTests {
    // sinifin bədəni...
}
  1. Həm resurs yeri, həm də xüsusi yükleyici konfiqurasiya edirik.
@ContextConfiguration resurs yerlərinin və ya konfiqurasiya siniflərinin, həmçinin valideyn və ya əhatə edən siniflər tərəfindən elan edilmiş kontekst initializer-larının irsiyyətini dəstəkləyir.

Kontekstin idarə olunması”, nəfəsli test sinif konfiqurasiyası@ContextConfiguration annotasiyasının javadocs-ına baxın.

@WebAppConfiguration

@WebAppConfiguration inteqrasiya testləri üçün WebApplicationContext-in yüklənəcəyini elan etmək üçün istifadə edilən sinif səviyyəsində bir annotasiyadır. @WebAppConfiguration annotasiyasının test sinifində olması, WebApplicationContext-in test üçün "file:src/main/webapp" kimi standart kök yolu ilə yüklənəcəyini təmin edir. Resurs əsas yolu test üçün WebApplicationContext üçün MockServletContext yaratmaq üçün "pərdə arxasında" istifadə olunur.

Aşağıdakı nümunə @WebAppConfiguration annotasiyasının necə istifadə olunacağını göstərir:

Java
@ContextConfiguration
@WebAppConfiguration 
class WebAppTests {
    // sinifin bədəni...
}
  1. @WebAppConfiguration annotasiyası.
Kotlin
@ContextConfiguration
@WebAppConfiguration 
class WebAppTests {
    // sinifin bədəni...
}
  1. @WebAppConfiguration annotasiyası.

Standart dəyərdən fərqli resurs əsas yolunu təyin etmək üçün value atributundan istifadə edə bilərsiniz. Resurs prefix-ləri classpath:file: dəstəklənir. Resurs prefix-i müəyyən edilməyibsə, yolun fayl sistemindəki resurs olduğu güman edilir. Aşağıdakı nümunə, classpath resursunun necə təyin olunacağını göstərir:

Java
@ContextConfiguration
@WebAppConfiguration("classpath:test-web-resources") 
class WebAppTests {
    // sinifin bədəni...
}
  1. Classpath resursunu təyin edirik.
Kotlin
@ContextConfiguration
@WebAppConfiguration("classpath:test-web-resources") 
class WebAppTests {
    // sinifin бедения...
}
  1. Classpath resursunu təyin edirik.

Diqqət yetirin ki, @WebAppConfiguration annotasiyası bir test sinifi daxilində @ContextConfiguration annotasiyası ilə birlikdə və ya test siniflərinin iyerarxiyası daxilində istifadə edilməlidir. Daha ətraflı məlumat üçün @WebAppConfiguration javadoc-una baxın.

@ContextHierarchy

@ContextHierarchy inteqrasiya testləri üçün ApplicationContext instansiyalarının iyerarxiyasını müəyyən etmək üçün istifadə edilən sinif səviyyəsində bir annotasiyadır. @ContextHierarchy annotasiyası kontekst iyerarxiyasının hər səviyyəsini müəyyən edən biri və ya bir neçə @ContextConfiguration annotasiyasını istifadə edərək elan edilməlidir. Aşağıdakı nümunələr @ContextHierarchy annotasiyasının bir test sinifində necə istifadə olunacağını göstərir (test siniflərinin iyerarxiyası daxilində də istifadə edilə bilər):

Java
@ContextHierarchy({
    @ContextConfiguration("/parent-config.xml"),
    @ContextConfiguration("/child-config.xml")
})
class ContextHierarchyTests {
    // sinifin бения...
}
Kotlin
@ContextHierarchy(
    ContextConfiguration("/parent-config.xml"),
    ContextConfiguration("/child-config.xml"))
class ContextHierarchyTests {
    // sinifin бения...
}
Java
@WebAppConfiguration
@ContextHierarchy({
    @ContextConfiguration(classes = AppConfig.class),
    @ContextConfiguration(classes = WebConfig.class)
})
class WebIntegrationTests {
    // sinifin бения...
}
Kotlin
@WebAppConfiguration
@ContextHierarchy(
        ContextConfiguration(classes = [AppConfig::class]),
        ContextConfiguration(classes = [WebConfig::class]))
class WebIntegrationTests {
    // sinifin бения...
}

Əgər test siniflərinin iyerarxiyasında bir kontekst səviyyəsi üçün konfiqurasiyanı birləşdirmək və ya üstələmək lazımdırsa, bu səviyyəyə istənilən ad təyin etmək lazımdır və hər bir uyğun sinif səviyyəsində @ContextConfiguration annotasiyası üçün name atributuna eyni dəyər ötürmək lazımdır. Əlavə nümunələr üçün “Kontekst iyerarxiyaları” bölməsinə və @ContextHierarchy javadoc-una baxın.

@ActiveProfiles

@ActiveProfiles inteqrasiya testləri üçün ApplicationContext yüklənərkən hansı bean təriflərinin aktiv profilərinin olacağını elan etmək üçün istifadə edilən sinif səviyyəsində bir annotasiyadır.

Aşağıdakı nümunə, dev profilinin aktiv olması lazım olduğunu göstərir:

Java
@ContextConfiguration
@ActiveProfiles("dev") 
class DeveloperTests {
    // sinifin бения...
}
  1. Profilin dev aktiv olması lazım olduğunu göstəririk.
Kotlin
@ContextConfiguration
@ActiveProfiles("dev") 
class DeveloperTests {
    // sinifin бения...
}
  1. Profilin dev aktiv olması lazım olduğunu göstəririk.

Aşağıdakı nümunə hər iki profilin - devintegration - aktiv olmasını göstərir:

Java
@ContextConfiguration
@ActiveProfiles({"dev", "integration"}) 
class DeveloperIntegrationTests {
    // sinifin бения...
}
  1. Profilin devintegration aktiv olması lazım olduğunu göstəririk.
Kotlin
@ContextConfiguration
@ActiveProfiles(["dev", "integration"]) 
class DeveloperIntegrationTests {
    // sinifin бения...
}
  1. Profilin devintegration aktiv olması lazım olduğunu göstəririk.
Annotasiya @ActiveProfiles ilə bağlı olan siniflərin və əhatə edən siniflərin elan etdiyi aktiv bean təriflərinin profil irsiyyətini dəstəkləyir. Siz həmçinin aktiv bean təriflərinin profillərini proqram vasitəsi ilə həll edə bilərsiniz, çünki xüsusi bir ActiveProfilesResolver yazaraq və onu @ActiveProfiles annotasiyasının resolver atributu ilə qeyd edərək qeyd edə bilərsiniz.

Mühit profilləri ilə kontekst konfiqurasiyası”, nəfəsli test sinif konfiqurasiyası@ActiveProfiles annotasiyası javadoc-una baxın.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION