WebTestClient

All lectures for UZ purposes
Daraja, Dars
Mavjud

WebTestClient - bu HTTP-client bo'lib, server dasturlarini test qilish uchun mo'ljallangan. Bu WebClient ni Spring'dan o'z ichiga oladi va uni so'rovlarni amalga oshirish uchun ishlatadi, lekin javoblarni tekshirish uchun test interfeysini ochadi. WebTestClient orqali skvoz testlarni amalga oshirish mumkin. Buni Spring MVC va Spring WebFlux dasturlarini ham server ishlamasdan test qilish uchun foydalanish mumkin, so'rov va javob obyektlarini imitatsiya qilish orqali.

Sozlash

WebTestClientni sozlash uchun bog'lanish uchun server sozlamasini tanlash kerak. Bu turli xil emulyatsiya server sozlamalari yoki haqiqiy serverga ulanish imkoniyatlaridan biri bo'lishi mumkin.

Kontrollerga bog'lanish

Bunday sozlash server ishlamasdan so'rov va javob obyektlarini imitatsiya qilish orqali ma'lum bir kontroller(lar)ni test qilish imkonini beradi.

WebFlux ilovalari uchun quyidagi konfiguratsiyani ishlating, bu Java WebFlux konfiguratsiyasiga teng infratuzilmani yuklaydi, ma'lum bir kontroller(lar)ni ro'yxatdan o'tkazadi va so'rovlarni qayta ishlash uchun WebHandler zanjiri yaratadi:

Java
WebTestClient client =
        WebTestClient.bindToController(new TestController()).build();
Kotlin
val client = WebTestClient.bindToController(TestController()).build()

Spring MVC uchun quyidagi konfiguratsiyani ishlating, bu StandaloneMockMvcBuilderga infratuzilma yuklash vakolatini dubldaydi, bu Java WebMvc konfiguratsiyasiga teng, ma'lum bir kontroller(lar)ni ro'yxatdan o'tkazadi va so'rovlarni qayta ishlash uchun MockMvc nusxasini yaratadi:

Java
WebTestClient client =
        MockMvcWebTestClient.bindToController(new TestController()).build();
Kotlin
val client = MockMvcWebTestClient.bindToController(TestController()).build()

ApplicationContextga bog'lanish

Bu sozlash Spring MVC yoki Spring WebFlux infratuzilmasi va kontroller e'lonlari bilan Spring konfiguratsiyasini yuklash va so'rovlarni server ishlamasdan so'rov va javob obyektlarini imitatsiya qilish orqali qayta ishlash imkonini beradi.

WebFlux uchun quyidagi konfiguratsiyani ishlating, bu erda Spring'dan ApplicationContext WebHttpHandlerBuilderga uzatiladi, so'rovlarni qayta ishlash uchun WebHandler zanjiri yaratish uchun:

Java
@SpringJUnitConfig(WebConfig.class) 
class MyTests {
    WebTestClient client;
    @BeforeEach
    void setUp(ApplicationContext context) {  
        client = WebTestClient.bindToApplicationContext(context).build(); 
    }
}
  1. Yuklash uchun konfiguratsiyani ko'rsating
  2. Konfiguratsiyani kiritish
  3. WebTestClient ni yarating
Kotlin
@SpringJUnitConfig(WebConfig::class) 
class MyTests {
    lateinit var client: WebTestClient
    @BeforeEach
    fun setUp(context: ApplicationContext) { 
        client = WebTestClient.bindToApplicationContext(context).build() 
    }
}
  1. Yuklash uchun konfiguratsiyani ko'rsating
  2. Konfiguratsiyani kiritish
  3. WebTestClient ni yarating

Spring MVC uchun quyidagi konfiguratsiyani ishlating, bu erda Spring'dan ApplicationContext MockMvcBuilders.webAppContextSetupga uzatiladi, so'rovlarni qayta ishlash uchun MockMvc nusxasini yaratish uchun:

Java
@ExtendWith(SpringExtension.class)
@WebAppConfiguration("classpath:META-INF/web-resources") 
@ContextHierarchy({
    @ContextConfiguration(classes = RootConfig.class),
    @ContextConfiguration(classes = WebConfig.class)
})
class MyTests {
    @Autowired
    WebApplicationContext wac; 
    WebTestClient client;
    @BeforeEach
    void setUp() {
        client = MockMvcWebTestClient.bindToApplicationContext(this.wac).build(); 
    }
}
  1. Yuklash uchun konfiguratsiyani ko'rsating
  2. Konfiguratsiyani kiritish
  3. WebTestClient ni yarating
Kotlin
@ExtendWith(SpringExtension.class)
@WebAppConfiguration("classpath:META-INF/web-resources") 
@ContextHierarchy({
    @ContextConfiguration(classes = RootConfig.class),
    @ContextConfiguration(classes = WebConfig.class)
})
class MyTests {
    @Autowired
    lateinit var wac: WebApplicationContext; 
    lateinit var client: WebTestClient
    @BeforeEach
    fun setUp() { 
        client = MockMvcWebTestClient.bindToApplicationContext(wac).build() 
    }
}
  1. Yuklash uchun konfiguratsiyani ko'rsating
  2. Konfiguratsiyani kiritish
  3. WebTestClient ni yarating

Router funktsiyasiga bog'lanish

Bunday sozlash funksional endpointlar ni server ishlamasdan so'rov va javob obyektlarini imitatsiya qilish orqali test qilish imkonini beradi.

WebFlux uchun quyidagi konfiguratsiyani ishlating, bu RouterFunctions.toWebHandlerga so'rovlarni qayta ishlash uchun server sozlamasini yaratish vakolatini beradi:

Java
RouterFunction<?> route = ...
client = WebTestClient.bindToRouterFunction(route).build();
Kotlin
val route: RouterFunction<*> = ...
val client = WebTestClient.bindToRouterFunction(route).build()

Spring MVC uchun WebMvc funksional endpointlarini test qilish opsiyalari hozircha mavjud emas.

Serverga bog'lanish

Bu sozlash haqiqiy serverga ulanish uchun skvoz HTTP-testlarini to'liq amalga oshirish imkonini beradi:

Java
client = WebTestClient.bindToServer().baseUrl("http://localhost:8080").build();
Kotlin
client = WebTestClient.bindToServer().baseUrl("http://localhost:8080").build()

Client konfiguratsiyasi

Server sozlamalari opsiyalaridan tashqari, oldindan URL, standart headerlar, client filtrlari va boshqa ko'p narsalar kabi client opsiyalarini ham sozlashingiz mumkin. Bu opsiyalarga bindToServer() ni bajargandan so'ng osonlik bilan kirish mumkin. Barcha boshqa konfiguratsiya variantlari uchun configureClient() ni ishlatishingiz kerak, server konfiguratsiyasidan client konfiguratsiyasiga o'tish uchun, quyida ko'rsatilganidek:

Java
client = WebTestClient.bindToController(new TestController())
        .configureClient()
        .baseUrl("/test")
        .build();
Kotlin
client = WebTestClient.bindToController(TestController())
        .configureClient()
        .baseUrl("/test")
        .build()
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION