web-dev-qa-db-ja.com

Spring TestRestTemplate統合テストのヘッダー値を追加

製品の統合テストにTestRestTemplateを使用しています。

次のようなテストが1つあります。

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

    // validation code here
}

この特定のリクエストでは、ヘッダー値が必要です。 TestRestTemplate呼び出しにヘッダーを追加する方法を教えてください。

24
DavidR

TestRestTemplateを使用するすべてのリクエストに特定のヘッダーを含める場合、次をセットアップに追加できます。

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

UpdateSpring Boot 1.4.0以降TestRestTemplate はしませんRestTemplateを拡張しますが、RestTemplateと同じAPIを引き続き提供します。

TestRestTemplate RestTemplateを拡張します RestTemplateと同じAPIを提供するため、リクエストの送信に同じAPIを使用できます。例えば:

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

すべてのリクエストに複数のヘッダーを使用する場合は、以下を追加できます

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

ヘッダーを設定したら、REST呼び出しにTestRestTemplate [testRestTemplate]またはRestTemplate [testRestTemplate.getRestTemplate()]を使用できます

1
Vasu K S