JavaRush /Kurslar /All lectures for UZ purposes /Spring TestContext Framework

Spring TestContext Framework

All lectures for UZ purposes
Daraja, Dars
Mavjud

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 yuklovchi AnnotationConfigContextLoader, GenericXmlContextLoader yoki GenericGroovyXmlContextLoader yuklovchilariga 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 yuklovchi AnnotationConfigWebContextLoader, GenericXmlWebContextLoader yoki GenericGroovyXmlWebContextLoader yuklovchilariga ishni delegatsiya qiladi, test uchun e'lon qilingan konfiguratsiyaga yoki odatiy joylashuvlar yoki odatiy konfiguratsion sinflar mavjudligiga qarab. Veb-kontekst yuklovchisi ContextLoader faqat @WebAppConfiguration annotatsiyasi test sinfiga kiritilganda ishlatiladi. Groovy faqat Groovy sinf yo'lida bo'lsa qo'llab-quvvatlanadi.

  • AnnotationConfigContextLoader: Komponent sinflardan oddiy ApplicationContext ni yuklaydi.

  • AnnotationConfigWebContextLoader: Komponent sinflardan WebApplicationContext ni yuklaydi.

  • GenericGroovyXmlContextLoader: Groovy skriptlari yoki konfiguratsion XML fayllari bo'lgan resurslardan oddiy ApplicationContext ni yuklaydi.

  • GenericGroovyXmlWebContextLoader: Groovy skriptlari yoki konfiguratsion XML fayllari bo'lgan resurslardan WebApplicationContext ni yuklaydi.

  • GenericXmlContextLoader: XML resurs joylashuvlaridan oddiy ApplicationContext ni yuklaydi.

  • GenericXmlWebContextLoader: XML resurs joylashuvlaridan WebApplicationContext ni 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.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION