Spring TestContext Framework (org.springframework.test.context paketida joylashgan) test muhiti ishlatilishidan qat'i nazar, modulli va integratsion testlarni qo'llab-quvvatlaydigan umumiy, annotatsiyalar bilan boshqariladigan qo'llab-quvvatlashni ta'minlaydi. TestContext freymvorkida ko'proq ahamiyat kelishuvga beriladi, konfiguratsiyadan ko'ra, odatiy qiymatlar bilan, bu esa annotatsiyaga asoslangan konfiguratsiya orqali o'zgartirilishi mumkin.
Umumiy test infratuzilmasiga qo'shimcha ravishda, TestContext freymvorki JUnit 4, JUnit Jupiter (yoki JUnit 5) va TestNG uchun aniq qo'llab-quvvatlashni ta'minlaydi. JUnit 4 va TestNG uchun Spring abstract yordamchi sinflarni taqdim etadi. Bundan tashqari, Spring JUnit uchun maxsus Runner va JUnit 4 uchun maxsus Rules va JUnit Jupiter uchun maxsus Extension taqdim etadi, ular POJO test sinflari yozishga imkon beradi. POJO test sinflari belgilangan sinflar iyerarxiyasini kengaytirishi shart emas, masalan, abstrakt yordamchi sinflar.
Keyingi bo'limda TestContext freymvorkining ichki tarkiblari qisqacha ko'rib chiqiladi. Agar siz faqat freymvorkdan foydalanish bilan qiziqsangiz va o'zingizning maxsus tinglovchilaringiz yoki yuklovchilaringizni kengaytirishni xohlamasangiz, to'g'ridan-to'g'ri konfiguratsiyaga bag'ishlangan bo'limlarga o'ting (kontekstni boshqarish, bog'liqliklarni kiritish, tranzaksiyalarni boshqarish), yordamchi sinflar va annotatsiyalarni qo'llab-quvvatlash.
Qarang: "TestContext Frameworkining yordamchi sinflari".
Asosiy abstraktsiyalar
Freymvorkning yadrosi TestContextManager sinfi va TestContext, TestExecutionListener va SmartContextLoader interfeyslaridan iborat. TestContextManager interfeysi har bir test sinfi uchun yaratiladi (masalan, JUnit Jupiterda bitta test sinfi doirasida barcha test metodlarini bajarish uchun). TestContextManager interfeysi o'z navbatida joriy testning kontekstini o'z ichiga olgan TestContext ni boshqaradi. TestContextManager interfeysi shuningdek, test bajarilishi jarayonida TestContext holatini yangilaydi va TestExecutionListener amalga oshirilishiga ishni delegatsiya qiladi, bu esa testni haqiqatda bajarishni instrumental qilib, bog'liqliklarning kiritilishini, tranzaksiyalarni boshqarishni va hokazolarni ta'minlaydi. SmartContextLoader interfeysi belgilangan test sinfi uchun ApplicationContext ni yuklash uchun javobgardir. Qo'shimcha ma'lumot va turli amalga oshirish misollarini qarang javadoc va Spring test to'plamida.
TestContext
TestContext interfeysi test bajariladigan kontekstni inkapsulatsiya qiladi (haqiqiy ishlatilayotgan test fraymvoskidan mustaqil ravishda) va konteksni boshqarish hamda u uchun mas'ul bo'lgan test instance uchun kechaniy qo'llab-quvvatlashni ta'minlaydi. TestContext interfeysi shuningdek, SmartContextLoader ga ApplicationContext yuklashni so'rov bo'yicha delegatsiya qiladi.
TestContextManager
TestContextManager interfeysi Spring TestContext Frameworkiga asosiy kirish nuqtasi bo'lib, bitta TestContext ni boshqarish va aniqlangan test bajarilishi nuqtalarida har bir ro'yxatdan o'tgan TestExecutionListener ga voqealarni signallashtirish uchun javobgardir:
-
Har qanday "klassdan oldin" yoki "hamma oldin" test freymvoskiga tegishli metodlardan oldin.
-
Test instance ni post-protsessing qilish.
-
Har qanday "oldin" yoki "har biri oldin" test freymvoskiga tegishli metodlardan oldin.
-
Test metodini bajarishdan oldin, ammo testni tayyorlashdan keyin.
-
Test metodini bajarilganidan keyin, ammo testni buzishdan oldin.
-
Har qanday "keyin" yoki "har biri keyin" test freymvoskiga tegishli metodlardan keyin.
-
Har qanday "klassdan keyin" yoki "hamma keyin" test freymvoskiga tegishli metodlardan keyin.
TestExecutionListener
TestExecutionListener tinglovchisi TestContextManager tomonidan chop etilgan test bajarilish hodisalariga javob berish uchun API interfeysini aniqlaydi, u bilan tinglovchi ro'yxatdan o'tgan. Kofniguratsiya TestExecutionListener qarang.
Context Loaders
ContextLoader kontekst yuklovchisi – bu Spring TestContext Framework tomonidan boshqariladigan integratsion test uchun ApplicationContext ni yuklash uchun strategik interfeys. Siz komponent sinflari, aktiv binlarni aniqlash profillari, test xususiyatlari manbalari, kontekst iyerarxiyalari va WebApplicationContext qo'llab-quvvatlashini ta'minlash uchun ushbu interfeys o'rniga SmartContextLoader ni amalga oshirishingiz kerak.
SmartContextLoader yuklovchisi – bu ContextLoader interfeysini kengaytirish bo'lib, asl oddiy ContextLoader SPI interfeysini almashtiradi. Xususan, SmartContextLoader resurs joylashuvlarini, komponent sinflarni yoki kontekst boshlang'ichlarini ishlov berishni tanlaydi. Bundan tashqari, SmartContextLoader yuklayotgan kontekstda aktiv binlarni aniqlash profillarini va test xususiyatlari manbalarini o'rnatishi mumkin.
Springs quyidagi amalga oshirishlarni taqdim etadi:
-
DelegatingSmartContextLoader: Ikkita odatiy yuklovchilardan biri bo'lib, u ichki yuklovchiAnnotationConfigContextLoader,GenericXmlContextLoaderyokiGenericGroovyXmlContextLoaderyuklovchilariga ishni delegatsiya qiladi, sinf yoki odatiy joylashuvlar yoki odatiy konfiguratsion sinflar mavjudligini e'lon qilgan konfiguratsiyaga qarab. Groovy faqat Groovy sinf yo'lida bo'lsa qo'llab-quvvatlanadi. -
WebDelegatingSmartContextLoader: Ikki odatiy yuklovchilardan biri bo'lib, u ichki yuklovchiAnnotationConfigWebContextLoader,GenericXmlWebContextLoaderyokiGenericGroovyXmlWebContextLoaderyuklovchilariga ishni delegatsiya qiladi, test uchun e'lon qilingan konfiguratsiyaga yoki odatiy joylashuvlar yoki odatiy konfiguratsion sinflar mavjudligiga qarab. Veb-kontekst yuklovchisiContextLoaderfaqat@WebAppConfigurationannotatsiyasi test sinfiga kiritilganda ishlatiladi. Groovy faqat Groovy sinf yo'lida bo'lsa qo'llab-quvvatlanadi. -
AnnotationConfigContextLoader: Komponent sinflardan oddiyApplicationContextni yuklaydi. -
AnnotationConfigWebContextLoader: Komponent sinflardanWebApplicationContextni yuklaydi. -
GenericGroovyXmlContextLoader: Groovy skriptlari yoki konfiguratsion XML fayllari bo'lgan resurslardan oddiyApplicationContextni yuklaydi. -
GenericGroovyXmlWebContextLoader: Groovy skriptlari yoki konfiguratsion XML fayllari bo'lgan resurslardanWebApplicationContextni yuklaydi. -
GenericXmlContextLoader: XML resurs joylashuvlaridan oddiyApplicationContextni yuklaydi. -
GenericXmlWebContextLoader: XML resurs joylashuvlaridanWebApplicationContextni yuklaydi.
TestContext freymvorkining boshlang'ich yuklanishi
Spring TestContext Frameworkining ichki komponentlari uchun odatiy konfiguratsiya barcha keng tarqalgan foydalanish holatlari uchun yetarli hisoblanadi. Ammo, ba'zi hollarda ishlab chiquvchilar jamoasi yoki uchinchi tomon freymvorki standart ContextLoader ni o'zgartirishi, maxsus TestContext yoki ContextCache ni amalga oshirishi, standart ContextCustomizerFactory va TestExecutionListener amallarini qo'shishi kerak bo'lishi mumkin. Bunday holatlar uchun TestContext freymvorkining boshlang'ich yuklanishiga past darajada nazorat qilish strategiyasi mavjud.
TestContextBootstrapper TestContext Frameworkining yuklanishi uchun SPI interfeysini belgilaydi. TestContextBootstrapper TestContextManager tomonidan joriy test uchun TestExecutionListener amalga oshirishlarini yuklash va u boshqaradigan TestContext ni qurish uchun ishlatiladi. Test sinfi (yoki test sinflarining iyerarxiyasi) uchun maxsus yuklash strategiyasini @BootstrapWith annotatsiyasini to'g'ridan-to'g'ri yoki meta-annotatsiya sifatida ko'rsatish orqali sozlashingiz mumkin. Agar yuklovchi (bootstrapper) @BootstrapWith annotatsiyasi orqali aniq konfiguratsiya qilinmagan bo'lsa, DefaultTestContextBootstrapper yoki WebTestContextBootstrapper dan biri ishlatiladi, @WebAppConfiguration annotatsiyasining mavjudligiga qarab.
SPI interfeys sifatida TestContextBootstrapper kelajakda o'zgartirilishi mumkin bo'lganligi sababli (yangi talablarni hisobga olish uchun), ishlab chiquvchilarga ushbu interfeysni to'g'ridan-to'g'ri amalga oshirish o'rniga AbstractTestContextBootstrapper yoki uning aniq subklasslaridan birini kengaytirishni tavsiya qilamiz.
GO TO FULL VERSION