WebTestClient es un cliente HTTP diseñado para probar aplicaciones de servidor. Envuelve el WebClient de Spring y lo utiliza para realizar solicitudes, pero expone una fachada de prueba para probar las respuestas. WebTestClient se puede utilizar para realizar pruebas HTTP de un extremo a otro. También se puede utilizar para probar aplicaciones Spring MVC y Spring WebFlux sin un servidor en ejecución simulando objetos de solicitud y objetos de respuesta del servidor.

Configuración

Para configurar WebTestClient, debe seleccionar una configuración de servidor para el enlace. Esta puede ser una de varias configuraciones para el servidor simulado o una conexión a un servidor real.

Enlace de controlador

Esta configuración le permite probar controladores específicos utilizando objetos de solicitud y respuesta simulados sin un servidor en ejecución.

Para aplicaciones WebFlux, utilice la siguiente configuración, que carga la infraestructura equivalente a Configuraciones Java de WebFlux, registra los controladores dados y crea una cadena WebHandler para procesar solicitudes:

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

Para Spring MVC, use la siguiente configuración que delega StandaloneMockMvcBuilder autoridad para cargar infraestructura equivalente a Java - Configuración de WebMvc, registra los controladores dados y crea una instancia de MockMvc para manejar solicitudes:

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

Enlace a ApplicationContext

Esta configuración le permite cargar una configuración de Spring con infraestructura de Spring MVC o Spring WebFlux y declaraciones de controlador, y usarla para procesar solicitudes utilizando objetos simulados de solicitud y respuesta sin un servidor en ejecución.

Para WebFlux, use la siguiente configuración, donde se pasa ApplicationContext de Spring WebHttpHandlerBuilder para crear Cadena WebHandler para procesar solicitudes:

Java
@SpringJUnitConfig(WebConfig.class) 
clase MisPruebas {
    Cliente WebTestClient;
    @Antes deCada
    configuración vacía (contexto de ApplicationContext) { 
        cliente = WebTestClient.bindToApplicationContext(contexto).build(); 
    }
}
  1. Especifique la configuración a cargar
  2. Implementar la configuración
  3. Crear un WebTestClient
Kotlin
@SpringJUnitConfig(WebConfig::class) 
clase MisPruebas {
    cliente lateinit var: WebTestClient
    @Antes deCada
    configuración divertida (contexto: ApplicationContext) { 
        cliente = WebTestClient.bindToApplicationContext(context).build() 
    }
}
  1. Especifique la configuración a cargar
  2. Implementar la configuración
  3. Crear un WebTestClient

Para Spring MVC, use la siguiente configuración, donde el ApplicationContext de Spring se pasa a MockMvcBuilders.webAppContextSetup para crear una instancia MockMvc para procesar solicitudes:

Java
@ExtendWith(SpringExtension.class)
@WebAppConfiguration("classpath:META-INF/web-resources") 
@ContextHierarchy({
    @ContextConfiguration(clases = RootConfig.class),
    @ContextConfiguration(clases = WebConfig.clase)
})
clase MisPruebas {
    @autocableado
    WebApplicationContext wac; 
    Cliente WebTestClient;
    @Antes deCada
    configuración vacía() {
        cliente = MockMvcWebTestClient.bindToApplicationContext(this.wac).build(); 
    }
}
  1. Especifique la configuración a cargar
  2. Implementar la configuración
  3. Crear un WebTestClient
Kotlin
@ExtendWith(SpringExtension.class)
@WebAppConfiguration("classpath:META-INF/web-resources") 
@ContextHierarchy({
    @ContextConfiguration(clases = RootConfig.class),
    @ContextConfiguration(clases = WebConfig.clase)
})
clase MisPruebas {
    @autocableado
    lateinit var wac: WebApplicationContext; 
    cliente lateinit var: WebTestClient
    @Antes deCada
    configuración divertida() { 
        cliente = MockMvcWebTestClient.bindToApplicationContext(wac).build() 
    }
}
  1. Especifique la configuración a cargar
  2. Implementar la configuración
  3. Crear un WebTestClient

Enlazar a una función de enrutador

Esta configuración le permite probar puntos finales funcionales utilizando objetos de solicitud y respuesta simulados sin ejecutar el servidor.

Para WebFlux, utilice la siguiente configuración, que delega a RouterFunctions.toWebHandler la autoridad para crear una configuración de servidor para manejar solicitudes:

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

Actualmente no hay opciones de prueba para los puntos finales funcionales de WebMvc para Spring MVC.

Vincular al servidor

Esta configuración se conecta a un servidor en ejecución para realizar pruebas HTTP completas de un extremo a otro:

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

Configuración del cliente

Además de la configuración del servidor descrita anteriormente, también puede configurar la configuración del cliente, incluida la URL base, encabezados predeterminados, filtros de cliente y más. Se puede acceder fácilmente a estas opciones después de ejecutar bindToServer(). Para todas las demás opciones de configuración, debe utilizar configureClient() para pasar de la configuración del servidor a la configuración del cliente, como se muestra a continuación:

Java
cliente = WebTestClient.bindToController(new TestController())
        .configureClient()
        .baseUrl("/prueba")
        .build();
Kotlin
cliente = WebTestClient.bindToController(TestController())
        .configureClient()
        .baseUrl("/prueba")
        .build()