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);