Meneroka Spring Boot TestRestTemplate

1. Gambaran keseluruhan

Artikel ini meneroka Spring Boot TestRestTemplate . Ini boleh dianggap sebagai tindak lanjut dari Panduan untuk RestTemplate, yang sangat kami sarankan untuk membaca sebelum memfokus pada TestRestTemplate . TestRestTemplate boleh dianggap sebagai alternatif menarik dari RestTemplate .

2. Pergantungan Maven

Untuk menggunakan TestRestTemplate , anda diharuskan mempunyai kebergantungan yang sesuai seperti:

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

Anda boleh mendapatkan versi terbaru di Maven Central.

3. TestRestTemplate dan RestTemplate

Kedua-dua klien ini sangat sesuai untuk menulis ujian integrasi dan dapat menangani komunikasi dengan API HTTP dengan baik.

Sebagai contoh, mereka memberi kita kaedah yang sama iaitu kaedah standard, header, dan konstruk HTTP yang lain.

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

Berikut adalah contoh permintaan GET yang mudah:

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

Walaupun kedua-dua kelas sangat serupa, TestRestTemplate tidak meluaskan RestTemplate dan menawarkan beberapa ciri baru yang sangat menarik.

4. Apa yang Baru dalam TestRestTemplate ?

4.1. Pembina Dengan Kepercayaan Asas Asas

TestRestTemplate menyediakan konstruktor dengan mana kita dapat membuat templat dengan kelayakan yang ditentukan untuk pengesahan asas .

Semua permintaan yang dilakukan menggunakan instance ini akan disahkan dengan menggunakan bukti kelayakan yang disediakan:

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

4.2. Pembina Dengan HttpClientOption

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

Mari lihat contoh ringkas:

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 pilihan bersama Pengesahan Asas.

Sekiranya kita tidak memerlukan pengesahan, kita masih boleh membuat templat dengan konstruktor sederhana:

TestRestTemplate (TestRestTemplate.HttpClientOption.ENABLE_COOKIES)

4.3. Kaedah Baru

Pembina bukan sahaja dapat membuat templat dengan kelayakan yang ditentukan. Kami juga dapat menambahkan kelayakan setelah templat kami dibuat. TestRestTemplate memberi kita kaedah denganBasicAuth () yang menambahkan kelayakan ke templat 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 Kedua-dua TestRestTemplate dan RestTemplate

TestRestTemplate boleh berfungsi sebagai pembungkus untuk RestTemplate , misalnya jika kita terpaksa menggunakannya kerana kita berurusan dengan kod warisan. Anda dapat melihat di bawah ini bagaimana membuat pembungkus sederhana:

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

TestRestTemplate bukan lanjutan dari RestTemplate , melainkan alternatif yang mempermudah ujian integrasi dan memudahkan pengesahan semasa ujian. Ini membantu dalam penyesuaian klien HTTP Apache, tetapi juga dapat digunakan sebagai pembungkus RestTemplate .

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