Spring BootのTestRestTemplateを調べる
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
で提供されている例を確認できます。