Qaramlikni o'rnatish kodni konteynerdan kamroq bog'liq qilish kerak, bu esa an'anaviy Java EE rivojlanishidan ko'ra kamroq bo'ladi. Sizning ilovangizni tashkil qiluvchi POJO, Spring yoki boshqa har qanday konteyner yordamida yaratmasdan new operatori yordamida yaratilgan obyektlar bilan birgalikda JUnit yoki TestNG da tekshirishga yaroqli bo'lishi kerak. Sizning kodingizni izolyatsiyada sinovdan o'tkazish uchun mock objects (va boshqa foydali sinov usullari bilan birgalikda) foydalanishingiz mumkin. Spring arxitekturasi bo'yicha ko'rsatmalarga rioya qilsangiz, natijada toza ko'p darajali va komponentli kod bazasi modulli testni osonlashtiradi. Masalan, xizmat darajadagi obyektlarni DAO yoki saqlash interfeyslari bilan bog'lanishni ishga solmasdan test qilish mumkin.
Haqiqiy modulli testlar odatda juda tez amalga oshiriladi, chunki ish vaqtining infratuzilmasini yaratishga hojat yo'q. Haqiqiy modulli testlarga metodologiya rivojlanishining bir qismi sifatida urg'u berish samaradorlikni oshirishi mumkin. Ehtimol, IoC asoslangan ilovalaringiz uchun samarali modulli testlar yozish uchun sizga ushbu sinov bo'limi kerak bo'lmasligi mumkin. Biroq, Spring Framework ba'zi sinov ssenariylari uchun mock objects va test yordamchi sinflarini taklif qiladi, va ular ushbu bobda ko'rib chiqiladi.
Mock Objects
Spring quyidagi mock objects foydalanish uchun bir qator paketlarga ega:
-
Muvofiqilik
-
JNDI
-
Servlet API
-
Spring Web Responsive moduli
Muvofiqilik
org.springframework.mock.env paketi Environment va PropertySource (qarang, "Bean Aniqlash Profillari" va "PropertySource Abstraktsiyasi") abstraksiyalarining mock amallarini o'z ichiga oladi. MockEnvironment va MockPropertySource sizning kodingizni muvofiqlikni buzmagan holda konteynerdan tashqarida tekshirish uchun foydalidir.
JNDI
org.springframework.mock.jndi paketi JNDI SPI interfeysining qisman implementatsiyasini o'z ichiga oladi, bu test to'plamlari yoki mustaqil ilovalar uchun oddiy JNDI muhitini yaratish uchun ishlatilishi mumkin. Masalan, JDBC dan olingan DataSource test kodida Java EE konteynerdagi JNDI nomlariga biriktirilgan bo'lsa, siz test ssenariylarida ilova kodini va konfiguratsiyasini o'zgartirmasdan qayta ishlatishingiz mumkin.
org.springframework.mock.jndi paketida qo'llab-quvvatlash Spring Framework 5.2 dan boshlab rasmiy jihatdan eskirgan, va tayyor yechimlar, masalan,
Simple-JNDI kabi, afzal ko'riladi.
Servlet API
org.springframework.mock.web paketi servlet API (Servlet API) ning to'liq mock objects to'plamini o'z ichiga oladi, ular web-kontekstlar, kontrolerlar va filtrlarni sinash uchun foydalidir. Ushbu mock objects Spring Web MVC bilan ishlatish uchun mo'ljallangan va umuman olib qaraganda dinamik mock objects (masalan, EasyMock) yoki Servlet API muqobil mock objects (masalan, MockObjects) dan foydalanishdan qulayroq.
org.springframework.mock.web da joylashgan mock objects Servlet API 4.0 ga asoslangan.
Spring MVC Test infratuzilmasi Servlet API ga asoslangan mock objectslar bilan ishlaydi, bu Spring MVC uchun integratsiya testlash muhitini ta'minlaydi. "MockMvc" bo'limiga qarang.
Spring Web Responsive moduli
org.springframework.mock.http.server.reactive paketi WebFlux ilovalarida foydalanish uchun ServerHttpRequest va ServerHttpResponse ning mock amallarini o'z ichiga oladi. org.springframework.mock.web.server paketi bu mock objectsga va javob objectslariga bog'liq bo'lgan ServerWebExchange ni o'z ichiga oladi.
Va MockServerHttpRequest, va MockServerHttpResponse serverga xos implementatsiyalar kabi bir xil abstrakt asosiy sinflardan kelib chiqadi va ular bilan ishlash mantig'ini bo'lishadi. Masalan, mock so'rov objeki yaratishdan keyin o'zgarmaydi, lekin siz ServerHttpRequest dan mutate() usuli yordamida o'zgartirilgan nusxasini yaratishingiz mumkin.
Mock javob objeki yozuv kontraktini to'g'ri amalga oshirish uchun va yozuv tugatish deskriptori (ya'ni Mono<Void>) ni qaytarish uchun, u sukut bo'yicha Flux bilan cache().then() foydalanadi, bu esa ma'lumotlarni buferlaydi va sinovda tasdiqlash uchun ularni mavjud qiladi. Ilovalar maxsus yozuv funksiyasini (masalan, cheksiz oqimni tekshirish uchun) o'rnatishi mumkin.
WebTestClient so'rov mock objectsi va javob mock objectsiga asoslanib, HTTP serverisiz WebFlux ilovalarini testlashni qo'llab-quvvatlaydi. Mijozni ishlayotgan server bilan end-to-end testlash uchun ham foydalanish mumkin.
Modulli testlash uchun yordamchi sinflar
Spring modulli testlashda yordam berishi mumkin bo'lgan bir qator sinflarni o'z ichiga oladi. Ular ikki categoriyaga ajratiladi:
-
Umumiy maqsadli sinov uchun utilitalar
-
Spring MVC da sinov uchun utilitalar
Umumiy maqsadli sinov uchun utilitalar
org.springframework.test.util paketi modulli va integratsiya testlashda foydalanish uchun bir qator umumiy maqsadli utilitalarni o'z ichiga oladi.
ReflectionTestUtils - bu refleksiya asosidagi xizmat usullarining to'plami. Siz bu usullardan foydalanishingiz mumkin, agar quyidagi hollarda ilova kodini test qilishda konstantaning qiymatini o'zgartirish, non-public maydonini o'rnatish, non-public setterni chaqirish yoki non-public konfiguration yoki hayot sikli qaytaruv usulini chaqirish kerak bo'lsa:
-
ORM ramkalari (masalan, JPA va Hibernate), bunda
privateyokiprotectedmaydonlarga kirishga ruxsat beriladi, bu esa entitetdapublicxususiyat setterni o'rniga bo'ladi. -
Spring annotatsiyalariga (masalan,
@Autowired,@Injectva@Resource) qo'llab-quvvatlash, bu esa non-publicmaydonlar, setterlar va konfiguration usullari uchun qaramlikni o'rnatishni ta'minlaydi. -
Hayot sikli qaytaruv usullarini
@PostConstructva@PreDestroykabi annotatsiyalar bilan qo'llash.
AopTestUtils - bu AOP bilan bog'liq xizmat usullarining to'plami. Siz bu usullardan bitta yoki bir nechta Spring proksi orqasida yashirilgan asosiy maqsad obyektiga kirish uchun foydalanishingiz mumkin. Masalan, agar siz EasyMock yoki Mockito kabi kutubxonalardan foydalanib dinamik mock objects sifatida konfiguratsiyalangan bo'lsangiz, va bu mock objects Spring proksi bilan o'ralgan bo'lsa, siz asosiy mock objectsga to'g'ridan-to'g'ri kirishingiz mumkin, bu sizga kutilgan hodisalarni konfiguratsiyalash va ularni tasdiqlash imkonini beradi. Spring dagi asosiy AOP utilitalari haqida ma'lumot olish uchun AopUtils va AopProxyUtils bo'limlariga qarang.
Spring MVC da sinov uchun utilitalar
org.springframework.test.web paketi ModelAndViewAssert ni o'z ichiga oladi, bu siz Spring MVC dan ModelAndView objects bilan ishlaydigan modulli testlar uchun JUnit, TestNG yoki boshqa har qanday test ramkasi bilan birga foydalanishingiz mumkin.
ModelAndViewAssert dan Servlet API dan
MockHttpServletRequest,
MockHttpSession va boshqalar bilan birgalikda foydalaning. Spring MVC va REST Controller sinflari uchun Spring MVC WebApplicationContext konfiguratsiyasiga asoslangan integratsiya testlarini o'tkazish uchun Spring MVC Test Framework dan foydalaning.
GO TO FULL VERSION