Esplorazione di Spring Boot TestRestTemplate

1. Panoramica

Questo articolo esplora il TestRestTemplate di Spring Boot . Può essere trattato come un follow-up di The Guide to RestTemplate, che consigliamo vivamente di leggere prima di concentrarsi su TestRestTemplate . TestRestTemplate può essere considerato come un'alternativa interessante di RestTemplate .

2. Dipendenze di Maven

Per utilizzare TestRestTemplate , è necessario disporre di una dipendenza appropriata come:

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

Puoi trovare l'ultima versione su Maven Central.

3. TestRestTemplate e RestTemplate

Entrambi questi client sono abbastanza adatti per scrivere test di integrazione e possono gestire molto bene la comunicazione con le API HTTP.

Ad esempio, ci forniscono gli stessi metodi, metodi standard, intestazioni e altri costrutti HTTP.

E tutte queste operazioni sono ben descritte in The Guide to RestTemplate, quindi non le rivisiteremo qui.

Ecco un semplice esempio di richiesta GET:

TestRestTemplate testRestTemplate = new TestRestTemplate(); ResponseEntity response = testRestTemplate. getForEntity(FOO_RESOURCE_URL + "/1", String.class); assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));

Nonostante entrambe le classi siano molto simili, TestRestTemplate non estende RestTemplate e offre alcune nuove funzionalità molto interessanti.

4. Cosa c'è di nuovo in TestRestTemplate ?

4.1. Costruttore con credenziali di autenticazione di base

TestRestTemplate fornisce un costruttore con cui possiamo creare un modello con credenziali specificate per l'autenticazione di base .

Tutte le richieste eseguite utilizzando questa istanza verranno autenticate utilizzando le credenziali fornite:

TestRestTemplate testRestTemplate = new TestRestTemplate("user", "passwd"); ResponseEntity response = testRestTemplate. getForEntity(URL_SECURED_BY_AUTHENTICATION, String.class); assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));

4.2. Costruttore con HttpClientOption

TestRestTemplate ci consente inoltre di personalizzare il client HTTP Apache sottostante utilizzando HttpClientOption che è un'enumerazione in TestRestTemplate con le seguenti opzioni: ENABLE_COOKIES, ENABLE_REDIRECTS e SSL .

Vediamo un rapido esempio:

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

Nell'esempio sopra, stiamo usando le opzioni insieme all'autenticazione di base.

Se non abbiamo bisogno dell'autenticazione, possiamo comunque creare un modello con un semplice costruttore:

TestRestTemplate (TestRestTemplate.HttpClientOption.ENABLE_COOKIES)

4.3. Nuovo metodo

Non solo i costruttori possono creare un modello con credenziali specificate. Possiamo anche aggiungere le credenziali dopo aver creato il nostro modello. TestRestTemplate ci fornisce un metodo withBasicAuth () che aggiunge le credenziali a un modello già esistente:

TestRestTemplate testRestTemplate = new TestRestTemplate(); ResponseEntity response = testRestTemplate.withBasicAuth( "user", "passwd").getForEntity(URL_SECURED_BY_AUTHENTICATION, String.class); assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));

5. Utilizzare TestRestTemplate e RestTemplate

TestRestTemplate può funzionare come wrapper per RestTemplate , ad esempio se siamo costretti a usarlo perché abbiamo a che fare con codice legacy. Di seguito puoi vedere come creare un wrapper così semplice:

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

TestRestTemplate non è un'estensione di RestTemplate , ma piuttosto un'alternativa che semplifica i test di integrazione e facilita l'autenticazione durante i test. Aiuta nella personalizzazione del client HTTP Apache, ma può anche essere utilizzato come wrapper di RestTemplate .

Puoi controllare gli esempi forniti in questo articolo su GitHub.