Menjelajahi Spring Boot TestRestTemplate

1. Ikhtisar

Artikel ini membahas Spring Boot TestRestTemplate . Ini dapat diperlakukan sebagai tindak lanjut dari The Guide to RestTemplate, yang kami anjurkan dengan tegas untuk dibaca sebelum berfokus pada TestRestTemplate . TestRestTemplate dapat dianggap sebagai alternatif RestTemplate yang menarik .

2. Ketergantungan Maven

Untuk menggunakan TestRestTemplate , Anda harus memiliki dependensi yang sesuai seperti:

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

Anda dapat menemukan versi terbaru di Maven Central.

3. TestRestTemplate dan RestTemplate

Kedua klien ini sangat cocok untuk menulis pengujian integrasi dan dapat menangani komunikasi dengan API HTTP dengan sangat baik.

Misalnya, mereka memberi kita metode yang sama metode standar, header, dan konstruksi HTTP lainnya.

Dan semua operasi ini dijelaskan dengan baik di The Guide to RestTemplate, jadi kami tidak akan mengulasnya lagi di sini.

Berikut adalah contoh permintaan GET sederhana:

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

Terlepas dari kenyataan bahwa kedua kelas sangat mirip, TestRestTemplate tidak memperluas RestTemplate dan menawarkan beberapa fitur baru yang sangat menarik.

4. Apa yang Baru di TestRestTemplate ?

4.1. Pembuat Dengan Kredensial Otorisasi Dasar

TestRestTemplate menyediakan konstruktor yang dengannya kita dapat membuat template dengan kredensial yang ditentukan untuk otentikasi dasar .

Semua permintaan yang dilakukan menggunakan instance ini akan diautentikasi menggunakan kredensial yang diberikan:

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 Dengan HttpClientOption

TestRestTemplate juga memungkinkan kita menyesuaikan klien HTTP Apache yang mendasari menggunakan HttpClientOption yang merupakan enum dalam TestRestTemplate dengan opsi berikut: ENABLE_COOKIES, ENABLE_REDIRECTS , dan SSL .

Mari kita lihat contoh singkatnya:

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

Dalam contoh di atas, kami menggunakan opsi bersama dengan Autentikasi Dasar.

Jika kita tidak memerlukan otentikasi, kita masih bisa membuat template dengan konstruktor sederhana:

TestRestTemplate (TestRestTemplate.HttpClientOption.ENABLE_COOKIES)

4.3. Metode Baru

Tidak hanya konstruktor dapat membuat template dengan kredensial tertentu. Kami juga dapat menambahkan kredensial setelah template kami dibuat. TestRestTemplate memberi kita metode withBasicAuth () yang menambahkan kredensial ke template yang sudah ada:

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

5. Menggunakan TestRestTemplate dan RestTemplate

TestRestTemplate dapat bekerja sebagai pembungkus untuk RestTemplate , misalnya jika kita terpaksa menggunakannya karena kita berurusan dengan kode lama. Anda dapat melihat di bawah ini cara membuat pembungkus sederhana seperti itu:

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

TestRestTemplate bukanlah ekstensi dari RestTemplate , melainkan sebuah alternatif yang menyederhanakan pengujian integrasi dan memfasilitasi otentikasi selama pengujian. Ini membantu dalam kustomisasi klien HTTP Apache, tetapi juga dapat digunakan sebagai pembungkus RestTemplate .

Anda dapat melihat contoh yang diberikan dalam artikel ini di GitHub.