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:
WebTestClient client =
WebTestClient.bindToController(new TestController()).build();
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:
WebTestClient client =
MockMvcWebTestClient.bindToController(new TestController()).build();
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:
@SpringJUnitConfig(WebConfig.class)
class MyTests {
WebTestClient client;
@BeforeEach
void setUp(ApplicationContext context) {
client = WebTestClient.bindToApplicationContext(context).build();
}
}
- Yuklash uchun konfiguratsiyani ko'rsating
- Konfiguratsiyani kiritish
WebTestClientni yarating
@SpringJUnitConfig(WebConfig::class)
class MyTests {
lateinit var client: WebTestClient
@BeforeEach
fun setUp(context: ApplicationContext) {
client = WebTestClient.bindToApplicationContext(context).build()
}
}
- Yuklash uchun konfiguratsiyani ko'rsating
- Konfiguratsiyani kiritish
WebTestClientni yarating
Spring MVC uchun quyidagi konfiguratsiyani ishlating, bu erda Spring'dan ApplicationContext MockMvcBuilders.webAppContextSetupga uzatiladi, so'rovlarni qayta ishlash uchun MockMvc nusxasini yaratish uchun:
@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();
}
}
- Yuklash uchun konfiguratsiyani ko'rsating
- Konfiguratsiyani kiritish
WebTestClientni yarating
@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()
}
}
- Yuklash uchun konfiguratsiyani ko'rsating
- Konfiguratsiyani kiritish
WebTestClientni 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:
RouterFunction<?> route = ...
client = WebTestClient.bindToRouterFunction(route).build();
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:
client = WebTestClient.bindToServer().baseUrl("http://localhost:8080").build();
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:
client = WebTestClient.bindToController(new TestController())
.configureClient()
.baseUrl("/test")
.build();
client = WebTestClient.bindToController(TestController())
.configureClient()
.baseUrl("/test")
.build()
GO TO FULL VERSION