SPRING BOOT
Cách sử dụng Spring Scheduled trong Spring Boot Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java Hướng dẫn Upload file với Spring Boot trong Java Hướng dẫn download file với Spring Boot trong Java Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java Spring Boot là gì? Tại sao sử dụng Spring Boot trong Java Cài đặt Spring Boot trong Java, code một project Spring Boot cơ bản RESTful API là gì? Cách hoạt động của RESTful API trong Spring Boot RESTful API hoạt động qua giao thức HTTP như thế nào? CRUD đơn giản với RESTful API trong Spring Boot Java Các thuộc tính của Spring Boot trong Java Hướng dẫn sử dụng Thymeleaf và Spring Boot trong Java Hướng dẫn sử dụng FreeMarker với Spring Boot trong Java Hướng dẫn sử dụng JSP và Spring Boot trong Java Cách dùng Logging trong Spring Boot Kiến trúc 3layer trong Spring Boot là gì? Cách hoạt động thế nào? Hướng dẫn sử dụng Apache Tiles với Spring Boot trong Java Sử dụng nhiều ViewResolver trong Spring Boot Java Giới thiệu về Spring Boot Actuator trong ứng dụng Spring Boot Cách dùng Spring JDBC trong ứng dụng Spring Boot Java Spring Data JPA trong Spring Boot là gì? Spring Data JPA có gì hay? Tương tác giữa Spring Boot, JPA và cơ sở dữ liệu H2 Cách dùng Spring Email trong Spring Boot Sử dụng @bean trong ứng dụng Spring Boot Cách chuyển HTTP sang HTTPS trong Spring Boot Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền Cách triển khai Spring Boot trên Tomcat Server Sử dụng JUnit để tạo unit test trong Spring Boot Cách test RESTful API trong Spring Boot Tạo ứng dụng Chat với Spring Boot và Websocket Tạo trang web đa ngôn ngữ với Spring Boot trong Java Sử dụng Twitter Bootstrap trong Spring Boot Hướng dẫn sử dụng Interceptor trong Spring Boot Cách tạo Restful Client bằng RestTemplate trong Spring Boot Cách dùng Spring Boot và MongoDB trong Java Cách dùng Spring Boot và Mustache trong Java Cách dùng Groovy trong Spring Boot Java
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Cách test RESTful API trong Spring Boot

Ứng dụng của bạn đã được xây dựng trên nền tảng Spring Boot và sử dụng các API RESTful để cung cấp các dịch vụ cho người dùng. Nhưng làm thế nào để đảm bảo rằng ứng dụng của bạn hoạt động đúng như mong đợi?

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trong bài viết này, chúng tôi sẽ giới thiệu về cách test ứng dụng RESTful API trong Spring Boot và cung cấp cho bạn các công cụ và kỹ thuật cần thiết để thực hiện việc test một cách hiệu quả.

1. Giới thiệu RESTful API và test RESTful API

Trước khi đi tìm hiểu về các cách để test ứng dụng RESTful API trong Spring Boot, bạn có thể tìm hiểu về hai khái niệm Spring Boot và RESTful API qua hai bài viế về Spring BootRESTful API ở đây nhé!!!

RESTful API là một phương pháp để thiết kế các API cho các ứng dụng web và di động. Nó được xây dựng trên nền tảng của HTTP, sử dụng các phương thức HTTP như GET, POST, PUT và DELETE để quản lý các tài nguyên. Spring Boot là một framework phát triển ứng dụng web trong ngôn ngữ Java, cung cấp cho các lập trình viên một cách tiếp cận nhanh chóng và dễ dàng để xây dựng ứng dụng web.

Bài viết này được đăng tại [free tuts .net]

Tuy nhiên, việc test ứng dụng RESTful API trong Spring Boot là rất quan trọng để đảm bảo rằng ứng dụng của bạn hoạt động đúng như mong muốn. Trong bài viết này, chúng ta sẽ tìm hiểu về các kỹ thuật và công cụ để test ứng dụng RESTful API trong Spring Boot.

2. Các kỹ thuật test ứng dụng RESTful API trong Spring Boot

Unit Test

Unit Test là kỹ thuật test một phần mềm trong đó các đơn vị nhỏ nhất của phần mềm được test độc lập. Trong trường hợp của ứng dụng RESTful API trong Spring Boot, các đơn vị nhỏ nhất là các phương thức của API. Unit Test sử dụng các frameworks như JUnit để tạo ra các test case và kiểm tra các phương thức đó.

Ví dụ: Đoạn mã sau đây sử dụng JUnit để test một phương thức GET của ứng dụng RESTful API trong Spring Boot:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class UserControllerTest {

  @Autowired
  private TestRestTemplate restTemplate;

  @Test
  public void testGetUserById() {
    ResponseEntity<User> response = restTemplate.getForEntity("/users/1", User.class);
    User user = response.getBody();
    assertEquals(HttpStatus.OK, response.getStatusCode());
    assertEquals("John Doe", user.getName());
  }
}

Trong ví dụ này, chúng ta sử dụng TestRestTemplate để gửi một request HTTP GET đến API với đường dẫn /users/1 và kiểm tra kết quả trả về có phải là một đối tượng User với tên là "John Doe" hay không.

Integration Test

Integration Test là kỹ thuật test phần mềm để kiểm tra tính hợp nhất giữa các phần khác nhau của hệ thống. Trong trường hợp của ứng dụng RESTful API trong Spring Boot, Integration Test sử dụng một instance thực tế của ứng dụng để gửi các request HTTP đến API và kiểm tra kết quả trả về.

Ví dụ: Đoạn mã sau đây sử dụng thư viện Spring MVC Test để thực hiện Integration Test trên ứng dụng RESTful API trong Spring Boot:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class UserControllerIntegrationTest {

  @Autowired
  private MockMvc mockMvc;

  @Test
  public void testGetUserById() throws Exception {
    MvcResult result = mockMvc.perform(get("/users/1"))
        .andExpect(status().isOk())
        .andExpect(jsonPath("$.name").value("John Doe"))
        .andReturn();
    String content = result.getResponse().getContentAsString();
    User user = new ObjectMapper().readValue(content, User.class);
    assertNotNull(user);
  }
}

Trong ví dụ này, chúng ta sử dụng MockMvc để tạo ra một instance của ứng dụng Spring Boot và gửi một request HTTP GET đến API với đường dẫn /users/1. Sau đó, chúng ta sử dụng các phương thức andExpect() để kiểm tra kết quả trả về có phải là một đối tượng User với tên là "John Doe" hay không. Cuối cùng, chúng ta sử dụng ObjectMapper để chuyển đổi kết quả trả về từ định dạng JSON sang đối tượng User.

End-to-End Test

End-to-End Test là kỹ thuật test phần mềm để kiểm tra tính đúng đắn và hoạt động của toàn bộ hệ thống. Trong trường hợp của ứng dụng RESTful API trong Spring Boot, End-to-End Test sử dụng một instance thực tế của ứng dụng và mô phỏng các hành động của người dùng để kiểm tra tính đúng đắn và hoạt động của toàn bộ hệ thống.

Ví dụ: Đoạn mã sau đây sử dụng thư viện Selenium để thực hiện End-to-End Test trên ứng dụng RESTful API trong Spring Boot:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class UserControllerEndToEndTest {

  @LocalServerPort
  private int port;

  private WebDriver driver;

  @Before
  public void setUp() {
    driver = new ChromeDriver();
  }

  @After
  public void tearDown() {
    driver.quit();
  }

  @Test
  public void testGetUserById() throws Exception {
    driver.get("http://localhost:" + port + "/users/1");
    WebElement nameElement = driver.findElement(By.id("name"));
    assertEquals("John Doe", nameElement.getText());
  }
}

Trong ví dụ này, chúng ta sử dụng WebDriver để tạo ra một instance của trình duyệt Chrome và gửi một request HTTP GET đến API với đường dẫn /users/1 thông qua URL http://localhost:{port}/users/1, trong đó {port} là giá trị của @LocalServerPort. Sau đó, chúng ta sử dụng phương thức findElement() để tìm kiếm phần tử HTML có id là "name" và sử dụng phương thức getText() để lấy giá trị của phần tử đó. Cuối cùng, chúng ta sử dụng assertEquals() để kiểm tra giá trị lấy được có phải là "John Doe" hay không.

Lưu ý rằng để thực hiện End-to-End Test, chúng ta cần phải cài đặt và cấu hình một trình duyệt web như Chrome, Firefox hoặc Safari.

3. Các công cụ hỗ trợ test ứng dụng RESTful API trong Spring Boot

Trong phần này, chúng ta sẽ tìm hiểu về các công cụ hỗ trợ test ứng dụng RESTful API trong Spring Boot.

JUnit

junit png

1.1 Giới thiệu về JUnit

JUnit là một framework kiểm thử phổ biến trong Java, được sử dụng để viết và thực thi Unit Test. JUnit có thể được sử dụng để test các class, method và phương thức của ứng dụng.

1.2 Sử dụng JUnit trong việc test ứng dụng RESTful API trong Spring Boot

Để sử dụng JUnit trong việc test ứng dụng RESTful API trong Spring Boot, chúng ta cần thực hiện các bước sau:

Bước 1: Thêm JUnit vào dependencies của ứng dụng Spring Boot trong file pom.xml.

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope>
</dependency>

Bước 2: Tạo một Test Class để viết các Unit Test cho phương thức trong ứng dụng. Chúng ta sử dụng các Annotation của JUnit như @Test để đánh dấu các phương thức test và @Before để đánh dấu phương thức sẽ được thực thi trước khi các phương thức test khác.

Ví dụ:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
public class UserControllerTest {

    private MockMvc mockMvc;

    @Autowired
    private WebApplicationContext wac;

    @Before
    public void setup() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
    }

    @Test
    public void testGetAllUsers() throws Exception {
        this.mockMvc.perform(get("/users"))
            .andExpect(status().isOk());
    }
}

Trong ví dụ trên, chúng ta sử dụng MockMvc của Spring để kiểm thử API. @RunWith(SpringRunner.class) đánh dấu Test Class sử dụng Runner là SpringRunner và @SpringBootTest(classes = DemoApplication.class) cho phép chúng ta tải các Bean của ứng dụng trong Context của Spring để sử dụng trong Test.

Mockito

mockito png

2.1 Giới thiệu về Mockito

Mockito là một thư viện giả lập đối tượng trong Java, cho phép chúng ta kiểm tra các phương thức của đối tượng mà không cần phải tạo ra đối tượng thực sự. Mockito thường được sử dụng trong Integration Test để kiểm tra tích hợp giữa các thành phần khác nhau của ứng dụng.

2.2 Sử dụng Mockito trong việc test ứng dụng RESTful API trong Spring Boot

Để sử dụng Mockito trong việc test ứng dụng RESTful API trong Spring Boot, chúng ta cần thực hiện các bước sau:

Bước 1: Thêm Mockito vào dependencies của ứng dụng Spring Boot trong file pom.xml.

<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-core</artifactId>
  <version>2.28.2</version>
  <scope>test</scope>
</dependency>

Bước 2: Tạo một Test Class để viết các Unit Test cho phương thức trong ứng dụng. Chúng ta sử dụng các Annotation của JUnit như @Test để đánh dấu các phương thức test và @Mock để đánh dấu các đối tượng cần giả lập.

Ví dụ:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
public class UserServiceTest {

    @Mock
    private UserRepository userRepository;

    @InjectMocks
    private UserService userService;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testGetAllUsers() {
        when(userRepository.findAll()).thenReturn(Arrays.asList(new User("user1"), new User("user2")));
        List<User> userList = userService.getAllUsers();
        assertEquals(userList.size(), 2);
        assertEquals(userList.get(0).getName(), "user1");
        assertEquals(userList.get(1).getName(), "user2");
    }
}

Trong ví dụ trên, chúng ta sử dụng @Mock để giả lập đối tượng UserRepository và @InjectMocks để giả lập đối tượng UserService. Trong phương thức testGetAllUsers, chúng ta sử dụng when(userRepository.findAll()).thenReturn(Arrays.asList(new User("user1"), new User("user2"))) để giả lập phương thức findAll() của đối tượng UserRepository trả về một danh sách gồm 2 User. Sau đó, chúng ta gọi phương thức getAllUsers() của đối tượng UserService để kiểm tra kết quả trả về.

RestAssured

rest assured png

3.1 Giới thiệu về RestAssured

RestAssured là một thư viện kiểm thử API được sử dụng trong Java. RestAssured cung cấp các API dễ sử dụng để kiểm tra API RESTful, giúp chúng ta thực hiện các Unit Test và Integration Test cho ứng dụng.

3.2 Sử dụng RestAssured trong việc test ứng dụng RESTful API trong Spring Boot

Để sử dụng RestAssured trong việc test ứng dụng RESTful API trong Spring Boot, chúng ta cần thực hiện các bước sau:

Bước 1: Thêm RestAssured vào dependencies của ứng dụng Spring Boot trong file pom.xml.

<dependency>
  <groupId>io.rest-assured</groupId>
  <artifactId>rest-assured</artifactId>
  <version>4.3.3</version>
  <scope>test</scope>
</dependency>

Bước 2: Tạo một Test Class để viết các Unit Test cho phương thức trong ứng dụng. Chúng ta sử dụng các API của RestAssured để gọi các API RESTful

Ví dụ:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class UserControllerTest {

    private static final String BASE_URL = "http://localhost:8080/api/users";

    @Test
    public void testGetAllUsers() {
        given().when().get(BASE_URL).then().statusCode(200);
    }

    @Test
    public void testGetUserById() {
        given().pathParam("id", 1).when().get(BASE_URL + "/{id}").then().statusCode(200);
    }

    @Test
    public void testCreateUser() {
        given().contentType("application/json").body(new User("user1")).when().post(BASE_URL).then().statusCode(201);
    }

    @Test
    public void testUpdateUser() {
        given().contentType("application/json").body(new User("user1")).when().put(BASE_URL + "/1").then().statusCode(200);
    }

    @Test
    public void testDeleteUser() {
        given().pathParam("id", 1).when().delete(BASE_URL + "/{id}").then().statusCode(200);
    }
}

Trong ví dụ trên, chúng ta sử dụng given() để chỉ định các thông tin về phương thức HTTP (GET, POST, PUT, DELETE), body của request (nếu có), và path param hoặc query param (nếu có). Sau đó, chúng ta sử dụng then() để xác nhận kết quả trả về từ phương thức RESTful. Trong các phương thức test, chúng ta sử dụng các phương thức của RestAssured như statusCode() để kiểm tra mã trạng thái của phản hồi từ server.

4. Các câu hỏi thường gặp

Tại sao chúng ta cần phải test ứng dụng RESTful API trong Spring Boot?

Việc test giúp đảm bảo rằng ứng dụng của bạn hoạt động như mong đợi và đáp ứng được yêu cầu của người dùng. Việc thực hiện các Unit Test và Integration Test giúp đảm bảo chất lượng của ứng dụng và giảm thiểu các lỗi không mong muốn.

Các công cụ nào có thể được sử dụng để test ứng dụng RESTful API trong Spring Boot?

Các công cụ phổ biến được sử dụng để test ứng dụng RESTful API trong Spring Boot là JUnit, Mockito và RestAssured.

Các loại test nào có thể được thực hiện trên ứng dụng RESTful API trong Spring Boot?

Có hai loại test chính: Unit Test và Integration Test. Trong đó, Unit Test thực hiện kiểm tra một phần nhỏ của ứng dụng, trong khi Integration Test thực hiện kiểm tra toàn bộ ứng dụng.

Làm thế nào để chọn các trường hợp test phù hợp khi test ứng dụng RESTful API trong Spring Boot?

Bạn nên tập trung vào các trường hợp sử dụng chính của ứng dụng của bạn và các trường hợp biên, cũng như các trường hợp lỗi phổ biến mà người dùng có thể gặp phải khi sử dụng ứng dụng.

Làm thế nào để xác định kết quả của một test khi test ứng dụng RESTful API trong Spring Boot?

Bạn có thể xác định kết quả của một test bằng cách kiểm tra mã trạng thái của phản hồi từ server, kiểm tra nội dung của phản hồi, kiểm tra định dạng phản hồi và các tiêu chí khác.

5. Kết bài viết

Trong bài viết này, mình đã giới thiệu về cách test ứng dụng RESTful API trong Spring Boot và cung cấp các ví dụ về cách sử dụng các công cụ phổ biến như JUnit, Mockito và RestAssured để thực hiện việc test. Hy vọng rằng bài viết này đã giúp bạn hiểu rõ hơn về việc test ứng dụng RESTful API và cung cấp cho bạn các kiến thức cần thiết để tiếp cận việc test một cách hiệu quả.

Cùng chuyên mục:

Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java

Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java

Hướng dẫn download file với Spring Boot trong Java

Hướng dẫn download file với Spring Boot trong Java

Hướng dẫn Upload file với Spring Boot trong Java

Hướng dẫn Upload file với Spring Boot trong Java

Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java

Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java

Cách sử dụng Spring  Scheduled trong Spring Boot

Cách sử dụng Spring Scheduled trong Spring Boot

Cách dùng Groovy trong Spring Boot Java

Cách dùng Groovy trong Spring Boot Java

Cách dùng Spring Boot và Mustache trong Java

Cách dùng Spring Boot và Mustache trong Java

Cách dùng Spring Boot và MongoDB trong Java

Cách dùng Spring Boot và MongoDB trong Java

Cách tạo Restful Client bằng RestTemplate trong Spring Boot

Cách tạo Restful Client bằng RestTemplate trong Spring Boot

Hướng dẫn sử dụng Interceptor trong Spring Boot

Hướng dẫn sử dụng Interceptor trong Spring Boot

Sử dụng Twitter Bootstrap trong Spring Boot

Sử dụng Twitter Bootstrap trong Spring Boot

Tạo trang web đa ngôn ngữ với Spring Boot trong Java

Tạo trang web đa ngôn ngữ với Spring Boot trong Java

Tạo ứng dụng Chat với Spring Boot và Websocket

Tạo ứng dụng Chat với Spring Boot và Websocket

Sử dụng JUnit để tạo unit test trong Spring Boot

Sử dụng JUnit để tạo unit test trong Spring Boot

Cách triển khai Spring Boot trên Tomcat Server

Cách triển khai Spring Boot trên Tomcat Server

Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền

Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền

Duyệt cây nhị phân bằng phương pháp inOder trong Java

Duyệt cây nhị phân bằng phương pháp inOder trong Java

Xóa node của cây nhị phân tìm kiếm trong Java

Xóa node của cây nhị phân tìm kiếm trong Java

Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java

Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java

Xác định đường biên(boundary traversal) của cây nhị phân trong Java

Xác định đường biên(boundary traversal) của cây nhị phân trong Java

Top