Erkunden der Spring Boot TestRestTemplate

1. Übersicht

In diesem Artikel wird das Spring Boot TestRestTemplate erläutert . Es kann als Folge des Leitfadens zu RestTemplate behandelt werden, den wir unbedingt lesen sollten, bevor Sie sich auf TestRestTemplate konzentrieren . TestRestTemplate kann als attraktive Alternative zu RestTemplate angesehen werden .

2. Maven-Abhängigkeiten

Um TestRestTemplate verwenden zu können , müssen Sie über eine entsprechende Abhängigkeit verfügen, z.

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

Sie finden die neueste Version auf Maven Central.

3. TestRestTemplate und RestTemplate

Beide Clients eignen sich gut zum Schreiben von Integrationstests und können sehr gut mit HTTP-APIs kommunizieren.

Zum Beispiel bieten sie uns die gleichen Methoden, Standardmethoden, Header und andere HTTP-Konstrukte.

Alle diese Vorgänge sind im Handbuch zu RestTemplate ausführlich beschrieben, sodass wir sie hier nicht erneut betrachten werden.

Hier ist ein einfaches Beispiel für eine GET-Anfrage:

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

Trotz der Tatsache, dass beide Klassen sehr ähnlich sind, erweitert TestRestTemplate RestTemplate nicht und bietet einige sehr aufregende neue Funktionen.

4. Was ist neu in TestRestTemplate ?

4.1. Konstruktor mit grundlegenden Berechtigungsnachweisen

TestRestTemplate bietet einen Konstruktor, mit dem wir eine Vorlage mit angegebenen Anmeldeinformationen für die Basisauthentifizierung erstellen können .

Alle mit dieser Instanz ausgeführten Anforderungen werden mit den angegebenen Anmeldeinformationen authentifiziert:

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

4.2. Konstruktor mit HttpClientOption

Mit TestRestTemplate können wir auch den zugrunde liegenden Apache-HTTP-Client mithilfe von HttpClientOption anpassen, einer Aufzählung in TestRestTemplate mit den folgenden Optionen: ENABLE_COOKIES, ENABLE_REDIRECTS und SSL .

Sehen wir uns ein kurzes Beispiel an:

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

Im obigen Beispiel verwenden wir die Optionen zusammen mit der Standardauthentifizierung.

Wenn wir keine Authentifizierung benötigen, können wir dennoch eine Vorlage mit einem einfachen Konstruktor erstellen:

TestRestTemplate (TestRestTemplate.HttpClientOption.ENABLE_COOKIES)

4.3. Neue Methode

Konstruktoren können nicht nur eine Vorlage mit angegebenen Anmeldeinformationen erstellen. Wir können auch Anmeldeinformationen hinzufügen, nachdem unsere Vorlage erstellt wurde. TestRestTemplate gibt uns eine Methode withBasicAuth (), mit der einer bereits vorhandenen Vorlage Anmeldeinformationen hinzugefügt werden :

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

5. Verwenden Sie sowohl TestRestTemplate als auch RestTemplate

TestRestTemplate kann als Wrapper für RestTemplate fungieren , z. B. wenn wir gezwungen sind, es zu verwenden, weil es sich um Legacy-Code handelt. Im Folgenden sehen Sie, wie Sie einen so einfachen Wrapper erstellen:

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

TestRestTemplate ist keine Erweiterung von RestTemplate , sondern eine Alternative, die Integrationstests vereinfacht und die Authentifizierung während Tests erleichtert. Es hilft bei der Anpassung des Apache HTTP-Clients, kann aber auch als Wrapper von RestTemplate verwendet werden .

Sie können die Beispiele in diesem Artikel auf GitHub nachlesen.