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 proporciona la misma API que RestTemplate
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);