知識庫 / Spring / Spring Boot RSS 訂閱

探索 Spring Boot TestRestTemplate

HTTP Client-Side,Spring Boot,Spring Web,Testing
HongKong
11
02:37 PM · Dec 06 ,2025

1. 概述

本文將探討 Spring Boot 中的 TestRestTemplate。它可視為《RestTemplate 指南》的後續內容,我們強烈建議您在深入瞭解 TestRestTemplate 之前,先閲讀該指南。 TestRestTemplate 可以被視為 RestTemplate 的一種有吸引力的替代方案。

2. Maven 依賴

要使用 TestRestTemplate,您需要添加適當的依賴項,例如:

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

您可以在 Maven Central 找到最新版本。

3. TestRestTemplateRestTemplate

這兩個客户端都非常適合編寫集成測試,並且能夠很好地處理與 HTTP API 的通信。

它們提供了相同的標準方法、頭部和其他 HTTP 構造。

所有這些操作都詳細説明在《RestTemplate 指南》中,這裏就不再贅述。

這是一個簡單的 GET 請求示例:

TestRestTemplate testRestTemplate = new TestRestTemplate();
ResponseEntity<String> response = testRestTemplate.
  getForEntity(FOO_RESOURCE_URL + "/1", String.class);
 
Assertions.assertEquals(response.getStatusCode(), HttpStatus.OK);

儘管這兩個類非常相似,<em >TestRestTemplate</em> 不繼承 <em >RestTemplate</em>,但它確實提供了幾個非常令人興奮的新功能。

4. <emTestRestTemplate 中新功能

4.1. 使用基本身份驗證憑據的構造函數

<em>TestRestTemplate</em> 提供了一個構造函數,允許您創建一個帶有指定憑據的模板,用於基本身份驗證

所有使用該實例執行的請求都將使用提供的憑據進行身份驗證:

TestRestTemplate testRestTemplate
 = new TestRestTemplate("user", "passwd");
ResponseEntity<String> response = testRestTemplate.
  getForEntity(URL_SECURED_BY_AUTHENTICATION, String.class);
 
Assertions.assertEquals(response.getStatusCode(), HttpStatus.OK);

4.2. 使用 HttpClientOption 的構造函數

TestRestTemplate 還允許我們使用 HttpClientOption 定製底層 Apache HTTP 客户端。 HttpClientOptionTestRestTemplate 中的枚舉,具有以下選項: ENABLE_COOKIES, ENABLE_REDIRECTSSSL

下面是一個快速示例:

TestRestTemplate testRestTemplate = new TestRestTemplate("user", 
  "passwd", TestRestTemplate.HttpClientOption.ENABLE_COOKIES);
ResponseEntity<String> response = testRestTemplate.
  getForEntity(URL_SECURED_BY_AUTHENTICATION, String.class);
 
Assertions.assertEquals(response.getStatusCode(), HttpStatus.OK);

在上面的示例中,我們結合使用選項和基本身份驗證。

如果不需要身份驗證,我們仍然可以創建一個帶有簡單構造函數的模板:

TestRestTemplate(TestRestTemplate.HttpClientOption.ENABLE_COOKIES)

4.3. 新方法

不僅構造函數可以創建帶有指定憑據的模板,我們還可以添加憑據到模板創建完成後。<em >TestRestTemplate</em> 提供了 withBasicAuth() 方法,該方法將憑據添加到已存在的模板中:

TestRestTemplate testRestTemplate = new TestRestTemplate();
ResponseEntity<String> response = testRestTemplate.withBasicAuth(
  "user", "passwd").getForEntity(URL_SECURED_BY_AUTHENTICATION, 
  String.class);
 
Assertions.assertEquals(response.getStatusCode(), HttpStatus.OK);

5. 使用 TestRestTemplateRestTemplate

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);
 
Assertions.assertEquals(response.getStatusCode(), HttpStatus.OK);

6. 結論

TestRestTemplate 不是 RestTemplate 的擴展,而是一個替代方案,它簡化了集成測試並促進了測試過程中的身份驗證。它有助於 Apache HTTP 客户端的定製,但也可以用作 RestTemplate 的包裝器。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.