Menguji dengan Spring dan Spock

1. Perkenalan

Dalam tutorial singkat ini, kami akan menunjukkan manfaat menggabungkan kekuatan pendukung kerangka pengujian Spring Boot dan ekspresi kerangka kerja Spock apakah itu untuk pengujian unit atau integrasi.

2. Pengaturan Proyek

Mari kita mulai dengan aplikasi web sederhana. Itu dapat menyapa, mengubah salam dan mengatur ulang kembali ke default dengan panggilan REST sederhana. Selain dari kelas utama, kami menggunakan RestController sederhana untuk menyediakan fungsionalitas:

@RestController @RequestMapping("/hello") public class WebController { @GetMapping public String salutation() { return "Hello world!"; } }

Jadi pengontrol menyapa dengan 'Halo dunia!'. The @RestController penjelasan dan penjelasan shortcut memastikan pendaftaran SISA endpoint.

3. Ketergantungan Maven untuk Spock dan Spring Boot Test

Kita mulai dengan menambahkan dependensi Maven dan jika diperlukan konfigurasi plugin Maven.

3.1. Menambahkan Dependensi Kerangka Kerja Spock dengan Dukungan Musim Semi

Untuk Spock itu sendiri dan untuk dukungan Spring kami membutuhkan dua dependensi:

 org.spockframework spock-core 1.2-groovy-2.4 test   org.spockframework spock-spring 1.2-groovy-2.4 test  

Perhatikan, bahwa versi yang ditentukan dengan adalah referensi ke versi groovy yang digunakan.

3.2. Menambahkan Tes Boot Musim Semi

Untuk menggunakan utilitas pengujian Spring Boot Test, kita memerlukan ketergantungan berikut:

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

3.3. Menyiapkan Groovy

Dan karena Spock didasarkan pada Groovy, kami harus menambahkan dan mengkonfigurasi gmavenplus -plugin juga untuk dapat menggunakan bahasa ini dalam pengujian kami:

 org.codehaus.gmavenplus gmavenplus-plugin 1.6    compileTests    

Perhatikan, karena kami hanya membutuhkan Groovy untuk tujuan pengujian dan oleh karena itu kami membatasi tujuan plugin ke compileTest .

4. Memuat ApplicationContext dalam Tes Spock

Satu tes sederhana adalah untuk memeriksa apakah semua Beans dalam konteks aplikasi Spring dibuat :

@SpringBootTest class LoadContextTest extends Specification { @Autowired (required = false) private WebController webController def "when context is loaded then all expected beans are created"() { expect: "the WebController is created" webController } }

Untuk pengujian integrasi ini, kita perlu memulai ApplicationContext , yang dilakukan @SpringBootTest untuk kita. Spock menyediakan pemisahan bagian dalam pengujian kami dengan kata kunci seperti " when" , " then" atau " expected" .

Selain itu, kita dapat mengeksploitasi Groovy Truth untuk memeriksa apakah kacang bernilai nol, sebagai baris terakhir pengujian kita di sini.

5. Menggunakan WebMvcTest dalam Tes Spock

Demikian juga, kita dapat menguji perilaku WebController :

@AutoConfigureMockMvc @WebMvcTest class WebControllerTest extends Specification { @Autowired private MockMvc mvc def "when get is performed then the response has status 200 and content is 'Hello world!'"() { expect: "Status is 200 and the response is 'Hello world!'" mvc.perform(get("/hello")) .andExpect(status().isOk()) .andReturn() .response .contentAsString == "Hello world!" } }

Penting untuk dicatat bahwa dalam tes Spock kami (atau lebih tepatnya Spesifikasi), kami dapat menggunakan semua anotasi yang sudah dikenal dari kerangka kerja pengujian Spring Boot yang biasa kami gunakan.

6. Kesimpulan

Pada artikel ini, kami telah menjelaskan cara menyiapkan proyek Maven untuk menggunakan Spock dan kerangka pengujian Spring Boot digabungkan. Selain itu, kami telah melihat bagaimana kedua kerangka kerja saling melengkapi dengan sempurna.

Untuk menyelam lebih dalam, lihat tutorial kami tentang pengujian dengan Spring Boot, tentang kerangka kerja Spock dan tentang bahasa Groovy.

Terakhir, kode sumber dengan contoh tambahan dapat ditemukan di repositori GitHub kami.