WebTestClient
– це HTTP-клієнт, призначений для тестування серверних програм. Він обертає WebClient зі Spring та
використовує його для виконання запитів, але відкриває фасад тестування для перевірки відповідей. WebTestClient
можна використовувати для виконання наскрізних тестів HTTP. Його також можна використовувати для тестування програм
Spring MVC та Spring WebFlux без працюючого сервера за допомогою імітації об'єктів-запитів та об'єктів-відповідей
сервера.
Налаштування
Щоб налаштувати WebTestClient
, потрібно вибрати серверне налаштування для прив'язки. Це може бути один з
декількох параметрів налаштування сервера, що імітується, або підключення до реального сервера.
Прив'язка до контролера
Таке налаштування дозволяє тестувати конкретний контролер(и) за допомогою імітованих об'єктів-запитів та об'єктів-відповідей без працюючого сервера.
Для програм WebFlux використовуй наступну конфігурацію, яка завантажує інфраструктуру, еквівалентну Java-конфігурації WebFlux, реєструє зазначений контролер(и) і створює ланцюжок WebHandler для обробки запитів:
WebTestClient client =
WebTestClient.bindToController(new TestController()).build();
val client = WebTestClient.bindToController(TestController()).build()
Для Spring MVC використовуй наступну конфігурацію, яка делегує StandaloneMockMvcBuilder повноваження на завантаження інфраструктури, еквівалентної конфігурації WebMvc, реєструє заданий контролер(и) та створює екземпляр MockMvc для обробки запитів:
WebTestClient client =
MockMvcWebTestClient.bindToController(new TestController()).build();
val client = MockMvcWebTestClient.bindToController(TestController()).build()
Прив'язка до ApplicationContext
Це налаштування дозволяє завантажити конфігурацію Spring з інфраструктурою з Spring MVC або Spring WebFlux та оголошеннями контролерів, а також використовувати її для обробки запитів за допомогою імітованих об'єктів-запитів та об'єктів-відповідей без працюючого сервера.
Для WebFlux використовуй наступну конфігурацію, де ApplicationContext
зі Spring передається WebHttpHandlerBuilder, щоб створити ланцюжок
WebHandler для обробки запитів:
@SpringJUnitConfig(WebConfig.class)
class MyTests {
WebTestClient client;
@BeforeEach
void setUp(ApplicationContext context) {
client = WebTestClient.bindToApplicationContext(context).build();
}
}
- Вкажи конфігурацію для завантаження
- Введи конфігурацію
- Створи
WebTestClient
@SpringJUnitConfig(WebConfig::class)
class MyTests {
lateinit var client: WebTestClient
@BeforeEach
fun setUp(context: ApplicationContext) {
client = WebTestClient.bindToApplicationContext(context).build()
}
}
- Вкажіть конфігурацію для завантаження
- Введіть конфігурацію
- Створіть
WebTestClient
Для Spring MVC використовуй наступну конфігурацію, де ApplicationContext
зі Spring передається до MockMvcBuilders.webAppContextSetup, щоб створити екземпляр
href="https://javarush.com/quests/lectures/questspring.level02.lecture15">MockMvc для обробки запитів:
@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();
}
}
- Вкажи конфігурацію для завантаження
- Введи конфігурацію
- Створи
WebTestClient
@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()
}
}
- Вкажи конфігурацію для завантаження
- Введи конфігурацію
- Створи
WebTestClient
Прив'язка до функції маршрутизатора
Таке налаштування дозволяє тестувати функціональні кінцеві точки за допомогою імітованих об'єктів-запитів та об'єктів-відповідей без працюючого сервера.
Для WebFlux використовуй наступну конфігурацію, яка делегує RouterFunctions.toWebHandler
повноваження на
створення серверного налаштування для обробки запитів:
RouterFunction<?> route = ...
client = WebTestClient.bindToRouterFunction(route).build();
val route: RouterFunction<*> = ...
val client = WebTestClient.bindToRouterFunction(route).build()
Для Spring MVC наразі відсутні опції тестування функціональних кінцевих точок WebMvc.
Прив'язка до сервера
Це налаштування підключається до працюючого сервера для виконання повних наскрізних HTTP-тестів:
client = WebTestClient.bindToServer().baseUrl("http://localhost:8080").build();
client = WebTestClient.bindToServer().baseUrl("http://localhost:8080").build()
Конфігурація клієнта
На додаток до параметрів налаштування сервера, описаних раніше, ти також можеш налаштувати параметри клієнта, включно
з базовою URL-адресою, стандартними заголовками, фільтрами клієнта тощо. Доступ до цих опцій можна легко отримати
після виконання bindToServer()
. Для інших варіантів конфігурації необхідно використовувати configureClient()
,
щоб перейти від конфігурації сервера до конфігурації клієнта, як це показано нижче:
client = WebTestClient.bindToController(new TestController())
.configureClient()
.baseUrl("/test")
.build();
client = WebTestClient.bindToController(TestController())
.configureClient()
.baseUrl("/test")
.build()
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ