Menguji dengan Spring dan Spock

1. Pengenalan

Dalam tutorial ringkas ini, kami akan menunjukkan faedah menggabungkan kekuatan sokongan kerangka pengujian Spring Boot dan ekspresif kerangka Spock sama ada untuk ujian unit atau integrasi.

2. Penyediaan Projek

Mari kita mulakan dengan aplikasi web yang mudah. Ia dapat memberi salam, mengubah salam dan menetapkannya kembali ke lalai dengan panggilan REST sederhana. Selain dari kelas utama, kami menggunakan RestController ringkas untuk menyediakan fungsi:

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

Oleh itu, pengawal menyambut dengan 'Hello world!'. The @RestController anotasi dan penjelasan pintasan memastikan pendaftaran REST titik akhir.

3. Ketergantungan Maven untuk Ujian Spock dan Spring Boot

Kami mulakan dengan menambahkan kebergantungan Maven dan jika diperlukan konfigurasi plugin Maven.

3.1. Menambah Ketergantungan Kerangka Spock dengan Spring Support

Untuk Spock itu sendiri dan untuk sokongan Spring, kita memerlukan dua pergantungan:

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

Perhatikan, versi yang ditentukan adalah rujukan untuk versi groovy yang digunakan.

3.2. Menambah Spring Boot Test

Untuk menggunakan utiliti ujian Spring Boot Test, kami memerlukan kebergantungan berikut:

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

3.3. Menubuhkan Groovy

Oleh kerana Spock berdasarkan Groovy, kita harus menambah dan mengkonfigurasi plugin gmavenplus juga untuk dapat menggunakan bahasa ini dalam ujian kami:

 org.codehaus.gmavenplus gmavenplus-plugin 1.6    compileTests    

Perhatikan bahawa kerana kami hanya memerlukan Groovy untuk tujuan ujian dan oleh itu kami menyekat matlamat pemalam untuk mengompilasi Uji .

4. Memuatkan ApplicationContext dalam Spock Test

Satu ujian mudah adalah untuk memeriksa apakah semua aplikasi Beans dalam 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 ujian integrasi ini, kita perlu memulakan ApplicationContext , itulah yang dilakukan oleh @SpringBootTest untuk kita. Spock menyediakan pemisahan bahagian dalam ujian kami dengan kata kunci seperti " bila" , " kemudian" atau " jangkaan" .

Selain itu, kami dapat memanfaatkan Kebenaran Groovy untuk memeriksa apakah kacang kosong, sebagai baris terakhir ujian kami di sini.

5. Menggunakan WebMvcTest dalam Ujian Spock

Begitu juga, kita boleh menguji tingkah laku 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 diperhatikan bahawa dalam ujian Spock (atau lebih tepatnya Spesifikasi) kita dapat menggunakan semua anotasi yang biasa dari kerangka ujian Spring Boot yang biasa kita gunakan.

6. Kesimpulannya

Dalam artikel ini, kami telah menerangkan cara menyiapkan projek Maven untuk menggunakan gabungan ujian Spock dan Spring Boot. Selanjutnya, kita telah melihat bagaimana kedua-dua kerangka saling melengkapi dengan sempurna.

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

Akhirnya, kod sumber dengan contoh tambahan boleh didapati di repositori GitHub kami.