为Spring TestRestTemplate集成测试添加标头值

时间:2016-01-06 19:46:34

标签: java spring spring-boot integration-testing

我正在使用TestRestTemplate对我们的产品进行集成测试。

我有一个看起来像这样的测试:

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

    // validation code here
}

此特定请求需要Header值。有人可以告诉我如何在TestRestTemplate电话中添加标题吗?

3 个答案:

答案 0 :(得分:24)

更新As of Spring Boot 1.4.0TestRestTemplate不再延长RestTemplate,但仍提供与RestTemplate相同的API。

TestRestTemplate extends RestTemplate 提供与RestTemplate相同的API,因此您可以使用相同的API发送请求。例如:

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

答案 1 :(得分:14)

如果您希望使用TestRestTemplate的所有请求都包含某些标题,则可以将以下内容添加到您的设置中:

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

答案 2 :(得分:1)

如果您想为所有请求使用多个标头,可以添加以下内容

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

设置标头后,您可以使用TestRestTemplate [testRestTemplate]RestTemplate [testRestTemplate.getRestTemplate()]进行REST呼叫