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