Skúmanie testovania Spring Boot TestRestTemplate

1. Prehľad

Tento článok skúma Spring Boot TestRestTemplate. Môže to byť považované za pokračovanie Sprievodcu restTemplate, ktorý si dôrazne odporúčame prečítať skôr, ako sa na neho zameráte TestRestTemplate. TestRestTemplate možno považovať za atraktívnu alternatívu k RestTemplate.

2. Maven závislosti

Použit TestRestTemplate, musíte mať príslušnú závislosť, ako napríklad:

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

Najnovšiu verziu nájdete na serveri Maven Central.

3. TestRestTemplate a RestTemplate

Obaja títo klienti sú celkom vhodní na písanie integračných testov a veľmi dobre si poradia s komunikáciou s HTTP API.

Napríklad nám poskytujú rovnaké metódy, štandardné metódy, hlavičky a ďalšie konštrukcie HTTP.

A všetky tieto operácie sú dobre popísané v Sprievodcovi restTemplate, takže ich tu nebudeme vracať späť.

Tu je jednoduchý príklad žiadosti GET:

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

Napriek tomu, že obe triedy sú si veľmi podobné, TestRestTemplate nepresahuje RestTemplate a ponúka niekoľko veľmi zaujímavých nových funkcií.

4. Čo je nové v TestRestTemplate?

4.1. Konštruktor so základnými prihlasovacími údajmi

TestRestTemplate poskytuje konštruktor, s ktorým môžeme vytvoriť šablónu so zadanými povereniami pre základné overenie.

Všetky žiadosti vykonané pomocou tejto inštancie budú autentifikované pomocou poskytnutých poverení:

TestRestTemplate testRestTemplate = nový TestRestTemplate ("užívateľ", "heslo"); ResponseEntity response = testRestTemplate. getForEntity (URL_SECURED_BY_AUTHENTICATION, String.class); assertThat (response.getStatusCode (), equalTo (HttpStatus.OK));

4.2. Konštruktér s HttpClientOption

TestRestTemplate tiež nám umožňuje prispôsobiť základného klienta Apache HTTP pomocou HttpClientOption ktoré je enum v TestRestTemplate s nasledujúcimi možnosťami: ENABLE_COOKIES, ENABLE_REDIRECTSa SSL.

Pozrime sa na krátky príklad:

TestRestTemplate testRestTemplate = nový TestRestTemplate ("užívateľ", "heslo", TestRestTemplate.HttpClientOption.ENABLE_COOKIES); ResponseEntity response = testRestTemplate. getForEntity (URL_SECURED_BY_AUTHENTICATION, String.class); assertThat (response.getStatusCode (), equalTo (HttpStatus.OK))

Vo vyššie uvedenom príklade používame možnosti spolu so základným overením.

Ak nepotrebujeme overenie, stále môžeme vytvoriť šablónu pomocou jednoduchého konštruktora:

TestRestTemplate (TestRestTemplate.HttpClientOption.ENABLE_COOKIES)

4.3. Nová metóda

Nielen konštruktéri môžu vytvoriť šablónu so zadanými povereniami. Môžeme tiež pridať poverenia po vytvorení našej šablóny. TestRestTemplate nám dáva metódu withBasicAuth () ktorý pridáva poverenia do už existujúcej šablóny:

TestRestTemplate testRestTemplate = nový TestRestTemplate (); ResponseEntity response = testRestTemplate.withBasicAuth ("užívateľ", "heslo"). GetForEntity (URL_SECURED_BY_AUTHENTICATION, String.class); assertThat (response.getStatusCode (), equalTo (HttpStatus.OK));

5. Použitie oboch TestRestTemplate a RestTemplate

TestRestTemplate môže fungovať ako obal pre RestTemplate, napr. ak sme nútení ho používať, pretože máme do činenia so starým kódom. Nižšie môžete vidieť, ako vytvoriť taký jednoduchý obal:

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

6. Záver

TestRestTemplate nie je rozšírením RestTemplate, ale skôr alternatíva, ktorá zjednodušuje testovanie integrácie a uľahčuje autentifikáciu počas testov. Pomáha pri prispôsobovaní klienta Apache HTTP, ale tiež ho možno použiť ako obal RestTemplate.

Príklady uvedené v tomto článku si môžete pozrieť na GitHub.


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