SpringBoot は RESTful API 統合テストに TestRestTemplate を使用します

SpringBoot は RESTful API 統合テストに TestRestTemplate を使用します

RESTful API 統合テストは、アプリケーションとその外部依存関係間の統合をテストします。SpringBoot では RESTful API をテストするための TestRestTemplate が提供されていますので、この記事では RESTful API の統合テストに TestRestTemplate を使用する方法を紹介します。

ここに画像の説明を挿入

1.TestRestTemplateとは

TestRestTemplate は、SpringBoot が提供する RESTful API をテストするためのツールクラスです。TestRestTemplate は、テストで HTTP 要求をシミュレートし、応答が期待どおりであることを検証できます。TestRestTemplate は RestTemplate に基づいて実装されていますが、テストで使用するために異なる構成とインターセプターを使用します。

2.TestRestTemplateの使い方

TestRestTemplate の使用は非常に簡単で、テスト クラスで TestRestTemplate インスタンスを作成し、このインスタンスを使用して HTTP リクエストを実行するだけです。たとえば、TestRestTemplate を使用して RESTful API をテストする例を次に示します。

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class UserControllerIntegrationTest {
    
    

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    public void shouldReturnUserById() {
    
    
        ResponseEntity<User> responseEntity = restTemplate.getForEntity("/users/{id}", User.class, 1);
        User user = responseEntity.getBody();
        assertThat(user.getId()).isEqualTo(1L);
        assertThat(user.getName()).isEqualTo("John Smith");
    }
}

テストでは、Spring Boot Test と JUnit アノテーションを使用してテスト環境を構成します。@Autowired アノテーションは、TestRestTemplate インスタンスを自動的に挿入するために使用されます。テスト メソッドでは、TestRestTemplate を使用して HTTP GET リクエストを実行し、アサーションを使用して応答が期待どおりであることを確認します。

3. TestRestTemplate の高度な使用法

TestRestTemplate は、HTTP リクエストをシミュレートし、テストでの応答を検証するための高度な使用法を多数提供します。一般的な高度な使用法をいくつか示します。

3.1 HTTPリクエストのシミュレーション

TestRestTemplate は、GET、POST、PUT、DELETE などのさまざまな HTTP リクエストをシミュレートできます。ここではいくつかの例を示します。

// GET 请求
ResponseEntity<User> responseEntity = restTemplate.getForEntity("/users/{id}", User.class, 1);

// POST 请求
User user = new User("John Smith");
ResponseEntity<User> responseEntity = restTemplate.postForEntity("/users", user, User.class);

// PUT 请求
User user = new User("John Smith");
restTemplate.put("/users/{id}", user, 1);

// DELETE 请求
restTemplate.delete("/users/{id}", 1);

3.2 HTTP レスポンスの検証

TestRestTemplate は、ステータス コード、応答ヘッダー、応答本文など、HTTP 応答のさまざまな属性を検証できます。ここではいくつかの例を示します。

// 验证状态码
ResponseEntity<User> responseEntity = restTemplate.getForEntity("/users/{id}", User.class, 1);
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);

// 验证响应头
ResponseEntity<User> responseEntity = restTemplate.getForEntity("/users/{id}", User.class, 1);
assertThat(responseEntity.getHeaders().getContentType()).isEqualTo(MediaType.APPLICATION_JSON);

// 验证响应体
ResponseEntity<User> responseEntity = restTemplate.getForEntity("/users/{id}", User.class, 1);
User user = responseEntity.getBody();
assertThat(user.getId()).isEqualTo(1L);
assertThat(user.getName()).isEqualTo("John Smith");

3.3 リクエストヘッダーの追加

TestRestTemplate は、HTTP リクエスト ヘッダーを追加して、実際の HTTP リクエストをシミュレートできます。ここではいくつかの例を示します。

HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer token");
HttpEntity<Object> entity = new HttpEntity<>(headers);
ResponseEntity<User> responseEntity = restTemplate.exchange("/users/{id}", HttpMethod.GET, entity, User.class, 1);
User user = responseEntity.getBody();
assertThat(user.getId()).isEqualTo(1L);
assertThat(user.getName()).isEqualTo("John Smith");

3.4 パラメータ化された URL の使用

TestRestTemplate は、パラメーター化された URL を使用して、テストで URL を動的に生成できます。ここではいくつかの例を示します。

// 使用占位符
ResponseEntity<User> responseEntity = restTemplate.getForEntity("/users/{id}", User.class, 1);

// 使用Map
Map<String, Long> params = new HashMap<>();
params.put("id", 1L);
ResponseEntity<User> responseEntity = restTemplate.getForEntity("/users/{id}", User.class, params);

// 使用URI
URI uri = UriComponentsBuilder.fromUriString("/users/{id}").build(1);
ResponseEntity<User> responseEntity = restTemplate.getForEntity(uri, User.class);

3.5 インターセプターの使用

TestRestTemplate はインターセプターを使用して、HTTP リクエストとレスポンスの間にカスタム ロジックを追加できます。ここではいくつかの例を示します。

// 添加请求拦截器
restTemplate.getRestTemplate().setInterceptors(Collections.singletonList((request, body, execution) -> {
    
    
    request.getHeaders().set("Authorization", "Bearer token");
    return execution.execute(request, body);
}));

// 添加响应拦截器
restTemplate.getRestTemplate().setInterceptors(Collections.singletonList((request, body, execution) -> {
    
    
    ResponseEntity<User> responseEntity = execution.execute(request, body, User.class);
    User user = responseEntity.getBody();
    user.setName(user.getName().toUpperCase());
    return new ResponseEntity<>(user, responseEntity.getStatusCode());
}));

上記の例では、リクエスト インターセプターとレスポンス インターセプターが使用されています。リクエスト インターセプターは Authorization リクエスト ヘッダーを追加し、レスポンス インターセプターはレスポンス本文の名前フィールドを大文字に変換します。

4. まとめ

TestRestTemplate は、SpringBoot が提供する RESTful API をテストするためのツールクラスです。TestRestTemplate を使用して HTTP 要求をシミュレートし、応答が期待どおりであることを確認します。TestRestTemplate は、さまざまな HTTP 要求のモック化、HTTP 応答の検証、要求ヘッダーの追加、パラメーター化された URL の使用、インターセプターの使用など、多くの高度な使用法を提供します。TestRestTemplate を使用してアプリケーションの RESTful API を効率的にテストし、外部依存関係との統合が適切に機能していることを確認します。

おすすめ

転載: blog.csdn.net/2302_77835532/article/details/131371791