Exploration du TestRestTemplate de démarrage initial

Explorer le Spring TestRestTemplate

1. Vue d'ensemble

Cet article explore lesTestRestTemplate de Spring Boot. Il peut être traité comme un suivi deThe Guide to RestTemplate, que nous vous recommandons vivement de lire avant de nous concentrer surTestRestTemplate. TestRestTemplate peut être considéré comme une alternative intéressante àRestTemplate.

2. Dépendances Maven

Pour utiliserTestRestTemplate, vous devez avoir une dépendance appropriée comme:


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

Vous pouvez trouver la dernière version surMaven Central.

3. TestRestTemplate etRestTemplate

Ces deux clients conviennent parfaitement à l'écriture de tests d'intégration et peuvent très bien gérer la communication avec les API HTTP.

Par exemple, ils nous fournissent les mêmes méthodes que les méthodes standard, les en-têtes et d’autres constructions HTTP.

Et toutes ces opérations sont bien décrites dansThe Guide to RestTemplate, nous ne les reviendrons donc pas ici.

Voici un exemple de requête GET simple:

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

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

Malgré le fait que les deux classes sont très similaires,TestRestTemplate n'étend pasRestTemplate et offre quelques nouvelles fonctionnalités très intéressantes.

4. Quoi de neuf dansTestRestTemplate?

4.1. Constructeur avec informations d'authentification de base

TestRestTemplate fournit un constructeur avec lequel nous pouvonscreate a template with specified credentials for basic authentication.

Toutes les demandes effectuées à l'aide de cette instance seront authentifiées à l'aide des informations d'identification fournies:

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

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

4.2. Constructeur avecHttpClientOption

TestRestTemplate nous permet également de personnaliser le client HTTP Apache sous-jacent à l'aide deHttpClientOption which est une énumération dansTestRestTemplate avec les options suivantes:ENABLE_COOKIES, ENABLE_REDIRECTS etSSL.

Voyons un exemple rapide:

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))

Dans l'exemple ci-dessus, nous utilisons les options avec l'authentification de base.

Si nous n'avons pas besoin d'authentification, nous pouvons toujours créer un modèle avec un constructeur simple:

TestRestTemplate (TestRestTemplate.HttpClientOption.ENABLE_COOKIES)

4.3. Nouvelle méthode

Les constructeurs peuvent non seulement créer un modèle avec les informations d'identification spécifiées. Nous pouvons également ajouter des informations d'identification après la création de notre modèle. TestRestTemplate nous donne une méthodewithBasicAuth() qui ajoute des informations d'identification à un modèle déjà existant:

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

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

5. Utiliser les deux TestRestTemplate etRestTemplate

TestRestTemplate peut fonctionner comme un wrapper pourRestTemplate, par exemple si nous sommes obligés de l'utiliser parce qu'il s'agit de code hérité. Vous pouvez voir ci-dessous comment créer un emballage aussi simple:

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. Conclusion

TestRestTemplate n'est pas une extension deRestTemplate, mais plutôt une alternative qui simplifie les tests d'intégration et facilite l'authentification lors des tests. Il aide à la personnalisation du client HTTP Apache, mais il peut également être utilisé comme un wrapper deRestTemplate.

Vous pouvez consulter les exemples fournis dans cet articleover on GitHub.