Untersuchen des Spring Boot TestRestTemplate

Entdecken Sie die Spring Boot TestRestTemplate

1. Überblick

In diesem Artikel werden die Spring BootTestRestTemplate erläutert. Es kann als Follow-up vonThe Guide to RestTemplate behandelt werden. Wir empfehlen dringend, es zu lesen, bevor Sie sich aufTestRestTemplate konzentrieren. TestRestTemplate kann als attraktive Alternative zuRestTemplate angesehen werden.

2. Maven-Abhängigkeiten

UmTestRestTemplate verwenden zu können, benötigen Sie eine entsprechende Abhängigkeit wie:


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

Sie finden die neueste Version aufMaven Central.

3. TestRestTemplate undRestTemplate

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

Sie stellen uns beispielsweise dieselben Methoden wie Standardmethoden, Header und andere HTTP-Konstrukte zur Verfügung.

Alle diese Vorgänge sind inThe Guide to RestTemplate gut 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, erweitertTestRestTemplateRestTemplate nicht und bietet einige sehr aufregende neue Funktionen.

4. Was ist neu inTestRestTemplate?

4.1. Konstruktor mit grundlegenden Auth-Anmeldeinformationen

TestRestTemplate liefert einen Konstruktor, mit dem wircreate a template with specified credentials for basic authentication 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 mitHttpClientOption

MitTestRestTemplate können wir auch den zugrunde liegenden Apache-HTTP-Client mithilfe vonHttpClientOption which anpassen. Dies ist eine Aufzählung inTestRestTemplate mit den folgenden Optionen:ENABLE_COOKIES, ENABLE_REDIRECTS undSSL.

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

Konstrukteure können nicht nur eine Vorlage mit den angegebenen Anmeldeinformationen erstellen. Wir können auch Anmeldeinformationen hinzufügen, nachdem unsere Vorlage erstellt wurde. TestRestTemplate gibt uns eine MethodewithBasicAuth(), 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. Beide verwenden TestRestTemplate undRestTemplate

TestRestTemplate kann als Wrapper fürRestTemplate arbeiten, z. wenn wir gezwungen sind, es zu benutzen, weil wir es mit altem Code zu tun haben. Im Folgenden sehen Sie, wie Sie einen solchen 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 vonRestTemplate, 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 vonRestTemplate verwendet werden.

Sie können sich die Beispiele in diesem Artikelover on GitHub ansehen.