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.