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.