Menguji API RESTful
Gunakan `MockMvc` atau `WebTestClient` untuk menulis ujian penyepaduan menyeluruh bagi pengawal REST Spring Boot anda.
Menguji API RESTful ialah pelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi merangkumi sejumlah 4 pelajaran.
Mengapa Menguji API REST?
API RESTful menjadi tunjang kepada banyak aplikasi moden. Pengujian API ini penting untuk memastikan ia berfungsi seperti yang dijangka, mengendalikan pelbagai input dan mengembalikan respons yang betul.
Pelajaran ini memfokuskan cara menulis ujian integrasi untuk pengawal REST Spring Boot menggunakan alat berkuasa: MockMvc dan WebTestClient.
Persediaan Ujian Spring Boot
Untuk menguji pengawal Spring Boot, kita memerlukan persediaan khas. Anotasi @SpringBootTest memuatkan konteks aplikasi yang lengkap, manakala @AutoConfigureMockMvc mengkonfigurasi MockMvc untuk kita.
Berikut ialah struktur asas bagi kelas ujian pengawal:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
@SpringBootTest
@AutoConfigureMockMvc
public class MyApiControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void contextLoads() {
// Your tests will go here
}
}Memperkenalkan MockMvc
MockMvc membolehkan anda menguji pengawal Spring MVC tanpa memulakan pelayan HTTP yang lengkap. Ia mensimulasikan permintaan dan respons HTTP, menjadikan ujian pantas dan terasing.
Ia amat sesuai untuk menguji lapisan pengawal, bagi memastikan laluan, pemetaan permintaan dan format respons adalah betul.
MockMvc: Menguji Permintaan GET
Mari uji titik akhir GET yang mudah, contohnya /api/hello yang mengembalikan "Hello, CoddyKit!". Kita akan mengesahkan kod status HTTP dan kandungan respons.
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
// Assume a @RestController with @GetMapping("/api/hello") returning "Hello, CoddyKit!"
@SpringBootTest
@AutoConfigureMockMvc
public class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void testHelloEndpoint() throws Exception {
mockMvc.perform(get("/api/hello"))
.andExpect(status().isOk())
.andExpect(content().string("Hello, CoddyKit!"));
}
}MockMvc: GET dengan Pemboleh Ubah Laluan
API sering menggunakan pemboleh ubah laluan untuk mengenal pasti sumber, seperti /api/users/{id}. MockMvc mengendalikannya secara semula jadi.
Berikut ialah cara menguji titik akhir yang menerima ID:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
// Assume @GetMapping("/api/users/{id}") returns "User: " + id
@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void testGetUserById() throws Exception {
mockMvc.perform(get("/api/users/{id}", 123))
.andExpect(status().isOk())
.andExpect(content().string("User: 123"));
}
}MockMvc: Menguji Permintaan POST
Bagi permintaan POST, anda biasanya menghantar isi permintaan, selalunya dalam format JSON. Kita boleh menentukan jenis kandungan dan isi menggunakan MockMvc.
Mari uji titik akhir yang mencipta item:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
// Assume @PostMapping("/api/items") creates an item and returns it
@SpringBootTest
@AutoConfigureMockMvc
public class ItemControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void testCreateItem() throws Exception {
String newItemJson = "{\"name\":\"Laptop\", \"price\":1200}";
mockMvc.perform(post("/api/items")
.contentType(MediaType.APPLICATION_JSON)
.content(newItemJson))
.andExpect(status().isCreated())
.andExpect(jsonPath("$.name").value("Laptop"));
}
}Memperkenalkan WebTestClient
WebTestClient ialah klien reaktif tanpa sekatan untuk menguji aplikasi web. Ia merupakan sebahagian daripada Spring WebFlux, tetapi juga boleh digunakan untuk menguji pengawal Spring MVC.
- Ia boleh melaksanakan panggilan HTTP sebenar jika dikonfigurasikan untuk menghubungi pelayan yang sedang berjalan.
- Ia juga boleh disokong oleh
MockMvcuntuk ujian pada bahagian pelayan yang serupa denganMockMvcitu sendiri, tetapi dengan API reaktif.
WebTestClient dalam Tindakan
Menggunakan WebTestClient adalah serupa dengan MockMvc, tetapi API fasihnya sering terasa lebih moden, khususnya untuk aplikasi reaktif. Mari uji semula titik akhir /api/hello kita.
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
import org.springframework.context.ApplicationContext;
import org.springframework.test.web.reactive.server.WebTestClient;
// For WebTestClient with Spring MVC, we can use @SpringBootTest
// and inject WebTestClient.Builder to build it with MockMvc.webAppContextSetup
// For simplicity, this example assumes a WebFlux app or WebTestClient set up for MockMvc
// @SpringBootTest
// class HelloWebClientTest {
// @Autowired WebApplicationContext wac;
// WebTestClient client;
// @BeforeEach void setup() { client = WebTestClient.bindToApplicationContext(wac).build(); }
// ...
// For a simpler runnable example focusing on WebTestClient usage:
@WebFluxTest // This annotation sets up a minimal reactive context for WebTestClient
public class HelloWebClientTest {
@Autowired
private WebTestClient webTestClient;
@Test
void testHelloEndpoint() {
webTestClient.get().uri("/api/hello")
.exchange()
.expectStatus().isOk()
.expectBody(String.class).isEqualTo("Hello, CoddyKit!");
}
}MockMvc berbanding WebTestClient
Bilakah anda patut menggunakan MockMvc berbanding WebTestClient?
MockMvc: Paling sesuai untuk aplikasi Spring MVC tradisional. Ia beroperasi pada bahagian pelayan, mensimulasikan permintaan dan tidak memerlukan pelayan yang sedang berjalan, maka ia pantas.WebTestClient: Sesuai untuk aplikasi Spring WebFlux reaktif. Ia juga menyediakan API klien reaktif untuk menguji aplikasi Spring MVC, menawarkan cara yang lebih moden dan fasih untuk menulis ujian, malah boleh menghubungi pelayan langsung untuk ujian integrasi hujung ke hujung yang sebenar.
Bagi kebanyakan ujian integrasi API REST Spring Boot yang memfokuskan lapisan pengawal, MockMvc ialah pilihan yang baik kerana kelajuannya dan integrasi langsungnya.
Semakan Pantas: Alat Pengujian API
Anda sedang membina aplikasi Spring Boot menggunakan Spring MVC tradisional. Anda mahu menulis ujian integrasi yang pantas dan terasing untuk pengawal REST anda tanpa memulakan pelayan HTTP yang lengkap.
Imbas Kembali dan Langkah Seterusnya
Dalam pelajaran ini, anda telah mempelajari cara menulis ujian integrasi yang menyeluruh untuk pengawal REST Spring Boot anda. Kita telah membincangkan:
- Menyediakan persekitaran ujian dengan
@SpringBootTestdan@AutoConfigureMockMvc. - Menggunakan
MockMvcuntuk mensimulasikan permintaan GET dan POST serta mengesahkan status dan kandungan. - Memperkenalkan
WebTestClientuntuk pengujian reaktif dan kes penggunaan alternatifnya. - Memahami perbezaan serta masa untuk memilih antara
MockMvcdanWebTestClient.
Alat ini penting untuk membina API RESTful yang kukuh dan boleh dipercayai!
Pelajari Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Soalan Lazim
Adakah pelajaran “Menguji API RESTful” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi, termasuk “Menguji API RESTful”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Menguji API RESTful”?
Gunakan `MockMvc` atau `WebTestClient` untuk menulis ujian penyepaduan menyeluruh bagi pengawal REST Spring Boot anda. Anda berlatih Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Menguji API RESTful” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi ini?
Ya. Setiap pelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Rangka Kerja Konteks Ujian Spring
- Menguji API RESTful
- Pangkalan Data Terbenam untuk Ujian
- Menguji Lapisan Web dengan @WebMvcTest dan MockMvc