1概要

この記事ではSpring Bootの

TestRestTemplate

について説明します。リンクのフォローアップとして扱うことができます:/rest-template[RestTemplateガイド]、

TestRestTemplate

に焦点を当てる前に読むことを強くお勧めします。

TestRestTemplate

は、

RestTemplate

の魅力的な代替手段と見なすことができます。


2 Mavenの依存関係


TestRestTemplate

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

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-test</artifactId>
    <version>2.1.0.RELEASE</version>
</dependency>

最新版はhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.springframework.boot%22%20AND%20a%3A%22spring-boot-test%にあります。 22[メイヴン中央]。


3

TestRestTemplate

および

RestTemplate


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

たとえば、標準のメソッド、ヘッダー、その他のHTTPコンストラクトと同じメソッドを提供しています。

そしてこれらすべての操作は

RestTemplateへのガイド

で詳しく説明されているので、ここでそれらを再検討することはしません。

これが簡単なGETリクエストの例です。

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

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

両方のクラスが非常に似ているという事実にもかかわらず、

TestRestTemplate



RestTemplate

を拡張せず、いくつかの非常にエキサイティングな新機能を提供します。

** 4

TestRestTemplate

の新機能


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


TestRestTemplate

は、基本認証用の指定された資格を持つテンプレートを作成するためのコンストラクタを提供します。

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

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

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


4.2.

HttpClientOption


を持つコンストラクタ


TestRestTemplate

を使用すると、

HttpClientOptionを使用して基礎となるApache HTTPクライアントをカスタマイズすることもできます。これは

TestRestTemplate

の列挙型で、

ENABLE

COOKIES、ENABLE

REDIRECTS

、および

SSL__です。

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

TestRestTemplate testRestTemplate = new TestRestTemplate("user",
  "passwd", TestRestTemplate.HttpClientOption.ENABLE__COOKIES);
ResponseEntity<String> 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<String> 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<String> response = testRestTemplate.getForEntity(
  FOO__RESOURCE__URL + "/1", String.class);

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


6. 結論


TestRestTemplate



RestTemplate

の拡張ではなく、統合テストを単純化し、テスト中の認証を容易にする代替手段です。これはApache HTTPクライアントのカスタマイズに役立ちますが、

RestTemplate

のラッパーとしても使用できます。


over on GitHub

で提供されている例を確認できます。