Utforske Spring Boot TestRestTemplate

1. Oversikt

Denne artikkelen utforsker vårstøvelen TestRestTemplate. Det kan behandles som en oppfølging av The Guide to RestTemplate, som vi anbefaler å lese før du fokuserer på TestRestTemplate. TestRestTemplate kan betraktes som et attraktivt alternativ til RestTemplate.

2. Maven-avhengigheter

Å bruke TestRestTemplate, må du ha en passende avhengighet som:

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

Du finner den nyeste versjonen på Maven Central.

3. TestRestTemplate og RestTemplate

Begge disse klientene er ganske egnet for å skrive integrasjonstester og kan håndtere kommunikasjon med HTTP APIer veldig bra.

For eksempel gir de oss de samme metodene som standardmetoder, overskrifter og andre HTTP-konstruksjoner.

Og alle disse operasjonene er godt beskrevet i Veiledningen til RestTemplate, så vi kommer ikke tilbake til dem her.

Her er et enkelt eksempel på GET-forespørsel:

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

Til tross for at begge klassene er veldig like, TestRestTemplate strekker seg ikke RestTemplate og tilbyr noen veldig spennende nye funksjoner.

4. Hva er nytt i TestRestTemplate?

4.1. Constructor With Basic Auth Credentials

TestRestTemplate gir en konstruktør som vi kan lage en mal med spesifisert legitimasjon for grunnleggende autentisering.

Alle forespørsler som blir utført ved hjelp av denne forekomsten, blir autentisert ved hjelp av oppgitt legitimasjon:

TestRestTemplate testRestTemplate = ny TestRestTemplate ("bruker", "passwd"); ResponseEntity respons = testRestTemplate. getForEntity (URL_SECURED_BY_AUTHENTICATION, String.class); assertThat (respons.getStatusCode (), equalTo (HttpStatus.OK));

4.2. Konstruktør med HttpClientOption

TestRestTemplate lar oss også tilpasse den underliggende Apache HTTP-klienten ved hjelp av HttpClientOption som er en enum i TestRestTemplate med følgende alternativer: ENABLE_COOKIES, ENABLE_REDIRECTS, og SSL.

La oss se et raskt eksempel:

TestRestTemplate testRestTemplate = ny TestRestTemplate ("bruker", "passwd", TestRestTemplate.HttpClientOption.ENABLE_COOKIES); ResponseEntity respons = testRestTemplate. getForEntity (URL_SECURED_BY_AUTHENTICATION, String.class); assertThat (respons.getStatusCode (), equalTo (HttpStatus.OK))

I eksemplet ovenfor bruker vi alternativene sammen med grunnleggende godkjenning.

Hvis vi ikke trenger autentisering, kan vi fremdeles lage en mal med en enkel konstruktør:

TestRestTemplate (TestRestTemplate.HttpClientOption.ENABLE_COOKIES)

4.3. Ny metode

Ikke bare kan konstruktører lage en mal med spesifisert legitimasjon. Vi kan også legge til legitimasjon etter at malen vår er opprettet. TestRestTemplate gir oss en metode withBasicAuth () som legger til legitimasjon til en allerede eksisterende mal:

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

5. Bruke begge deler TestRestTemplate og RestTemplate

TestRestTemplate kan fungere som en innpakning for RestTemplate, f.eks. hvis vi blir tvunget til å bruke den fordi vi har å gjøre med eldre koder. Du kan se nedenfor hvordan du lager en slik enkel innpakning:

RestTemplateBuilder restTemplateBuilder = ny RestTemplateBuilder (); restTemplateBuilder.configure (restTemplate); TestRestTemplate testRestTemplate = ny TestRestTemplate (restTemplateBuilder); ResponseEntity response = testRestTemplate.getForEntity (FOO_RESOURCE_URL + "/ 1", String.class); assertThat (respons.getStatusCode (), equalTo (HttpStatus.OK));

6. Konklusjon

TestRestTemplate er ikke en utvidelse av RestTemplate, men heller et alternativ som forenkler integrasjonstesting og letter autentisering under tester. Det hjelper med tilpasning av Apache HTTP-klient, men det kan også brukes som en innpakning av RestTemplate.

Du kan sjekke ut eksemplene i denne artikkelen på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found