Spring BootのTestRestTemplateを調べる

Spring Boot TestRestTemplateの調査

1. 概要

この記事では、Spring BootTestRestTemplateについて説明します。 これはThe Guide to RestTemplateのフォローアップとして扱うことができます。これは、TestRestTemplateに焦点を合わせる前に読むことを強くお勧めします。 TestRestTemplateは、RestTemplateの魅力的な代替手段と見なすことができます。

2. Mavenの依存関係

TestRestTemplateを使用するには、次のような適切な依存関係が必要です。


    org.springframework.boot
    spring-boot-test
    2.1.0.RELEASE

最新バージョンはMaven Centralにあります。

3. TestRestTemplateおよびRestTemplate

これらのクライアントは両方とも統合テストの作成に非常に適しており、HTTP APIとの通信を非常にうまく処理できます。

たとえば、標準のメソッド、ヘッダー、その他のHTTP構成要素と同じメソッドを提供します。

また、これらの操作はすべてThe Guide to RestTemplateで詳しく説明されているため、ここでは再度説明しません。

簡単なGETリクエストの例を次に示します。

TestRestTemplate testRestTemplate = new TestRestTemplate();
ResponseEntity response = testRestTemplate.
  getForEntity(FOO_RESOURCE_URL + "/1", String.class);

assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));

両方のクラスが非常に似ているという事実にもかかわらず、TestRestTemplateRestTemplateを拡張せず、いくつかの非常にエキサイティングな新機能を提供します。

4. TestRestTemplateの新機能

4.1. 基本認証資格情報を持つコンストラクター

TestRestTemplateは、create a template with specified credentials for basic authenticationを使用できるコンストラクターを提供します。

このインスタンスを使用して実行されるすべての要求は、提供された資格情報を使用して認証されます。

TestRestTemplate testRestTemplate
 = new TestRestTemplate("user", "passwd");
ResponseEntity response = testRestTemplate.
  getForEntity(URL_SECURED_BY_AUTHENTICATION, String.class);

assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));

4.2. HttpClientOptionのコンストラクター

TestRestTemplateを使用すると、HttpClientOption whichTestRestTemplateの列挙型であり、ENABLE_COOKIES, ENABLE_REDIRECTSおよびSSLのオプションを使用して、基盤となるApacheHTTPクライアントをカスタマイズすることもできます。

簡単な例を見てみましょう:

TestRestTemplate testRestTemplate = new TestRestTemplate("user",
  "passwd", TestRestTemplate.HttpClientOption.ENABLE_COOKIES);
ResponseEntity response = testRestTemplate.
  getForEntity(URL_SECURED_BY_AUTHENTICATION, String.class);

assertThat(response.getStatusCode(), equalTo(HttpStatus.OK))

上記の例では、基本認証とともにオプションを使用しています。

認証が必要ない場合でも、簡単なコンストラクターを使用してテンプレートを作成できます。

TestRestTemplate(TestRestTemplate.HttpClientOption.ENABLE_COOKIES)

4.3. 新しい方法

コンストラクターは、指定された資格情報でテンプレートを作成できるだけではありません。 テンプレートの作成後に資格情報を追加することもできます。 TestRestTemplateは、既存のテンプレートに資格情報を追加するメソッドwithBasicAuth()を提供します。

TestRestTemplate testRestTemplate = new TestRestTemplate();
ResponseEntity response = testRestTemplate.withBasicAuth(
  "user", "passwd").getForEntity(URL_SECURED_BY_AUTHENTICATION,
  String.class);

assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));

5. 両方を使用する TestRestTemplateおよびRestTemplate

TestRestTemplateは、RestTemplateのラッパーとして機能します。 レガシーコードを扱っているために使用を余儀なくされた場合。 以下に、このような単純なラッパーの作成方法を示します。

RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder();
restTemplateBuilder.configure(restTemplate);
TestRestTemplate testRestTemplate = new TestRestTemplate(restTemplateBuilder);
ResponseEntity response = testRestTemplate.getForEntity(
  FOO_RESOURCE_URL + "/1", String.class);

assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));

6. 結論

TestRestTemplateRestTemplateの拡張ではなく、統合テストを簡素化し、テスト中の認証を容易にする代替手段です。 Apache HTTPクライアントのカスタマイズに役立ちますが、RestTemplateのラッパーとしても使用できます。

この記事over on GitHubで提供されている例を確認できます。