test starter example java spring spring-boot integration-testing

java - starter - test rest api spring boot



Agregar valor de encabezado para la prueba de integraciĆ³n Spring TestRestTemplate (3)

Estoy usando TestRestTemplate para pruebas de integración en nuestro producto.

Tengo una prueba que se parece a esto:

@Test public void testDeviceQuery() { ResponseEntity<Page> deviceInfoPage = template.getForEntity(base, Page.class); // validation code here }

Esta solicitud particular espera un valor de encabezado. ¿Alguien puede hacerme saber cómo puedo agregar un encabezado a la llamada TestRestTemplate ?


Si desea que todas sus solicitudes utilizando TestRestTemplate para incluir ciertos encabezados, puede agregar lo siguiente a su configuración:

testRestTemplate.getRestTemplate().setInterceptors( Collections.singletonList((request, body, execution) -> { request.getHeaders() .add("header-name", "value"); return execution.execute(request, body); }));


Si desea utilizar múltiples encabezados para todas sus solicitudes, puede agregar lo siguiente

import org.apache.http.Header; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicHeader; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; private void setTestRestTemplateHeaders() { Header header = new BasicHeader("header", "value"); Header header2 = new BasicHeader("header2", "value2"); List<Header> headers = new ArrayList<Header>(); headers.add(header); headers.add(header2); CloseableHttpClient httpClient = HttpClients.custom().setDefaultHeaders(headers).build(); testRestTemplate.getRestTemplate().setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient)); }

Una vez que se configuran los encabezados, puede utilizar TestRestTemplate [testRestTemplate] o RestTemplate [testRestTemplate.getRestTemplate()] para sus llamadas REST


Actualización : a partir de Spring Boot 1.4.0 , TestRestTemplate ya no amplía RestTemplate pero sigue proporcionando la misma API que RestTemplate .

TestRestTemplate extiende RestTemplate proporciona la misma API que RestTemplate , por lo que puede usar esa misma API para enviar solicitudes. Por ejemplo:

HttpHeaders headers = new HttpHeaders(); headers.add("your_header", "its_value"); template.exchange(base, HttpMethod.GET, new HttpEntity<>(headers), Page.class);