Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi · Pelajaran

Menguji API RESTful

Gunakan `MockMvc` atau `WebTestClient` untuk menulis ujian penyepaduan menyeluruh bagi pengawal REST Spring Boot anda.

Pelajaran 2 daripada 411 langkah

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 MockMvc untuk ujian pada bahagian pelayan yang serupa dengan MockMvc itu 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 @SpringBootTest dan @AutoConfigureMockMvc.
  • Menggunakan MockMvc untuk mensimulasikan permintaan GET dan POST serta mengesahkan status dan kandungan.
  • Memperkenalkan WebTestClient untuk pengujian reaktif dan kes penggunaan alternatifnya.
  • Memahami perbezaan serta masa untuk memilih antara MockMvc dan WebTestClient.

Alat ini penting untuk membina API RESTful yang kukuh dan boleh dipercayai!

Percuma untuk bermula

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

  1. Rangka Kerja Konteks Ujian Spring
  2. Menguji API RESTful
  3. Pangkalan Data Terbenam untuk Ujian
  4. Menguji Lapisan Web dengan @WebMvcTest dan MockMvc
← Kembali ke Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi