Ở bài viết này mình sẽ hướng dẫn mọi người test với GET và POST của Controller trong Spring Boot với @WebMvcTest

  • Thêm những thư viện sau vào file build.gradle:

test Controller trong Spring Boot với @WebMvcTest

  • Sau đó ta tạo class có tên ExamControllerTest như sau:

test Controller trong Spring Boot với @WebMvcTest

  • Sau khi chúng ta chuẩn bị xong 2 bước trên sẽ tiến hành viết đoạn code test cho GET như sau:

test Controller trong Spring Boot với @WebMvcTest

Đoạn code trên ta sử dụng given(…).willReturn để tạo ra một mock object và sử dụng phương thức mvc.perform() để test phương thức findAll(), với phương thức này ta có thể cung cấp giá trị mình mong muốn phương thức trả về ví dụ như ở đoạn code trên thì giá trị mình mong muốn trả về là trạng thái của trang web là OK và một list Exam có độ dài là 2.

  • Còn đối với phương thức findById sẽ có 1 chút khác so với phương thức findAll khi ta tiến hành test:

test Controller trong Spring Boot với @WebMvcTest

Đối với phương thức findById ta vẫn sử dụng phương thức static là given(…).willReturn để tạo mock object nhưng nếu với phương thức findAll thì giá trị ta muốn trả về là một List Exam còn với phương thức findById thì giá trị trả về là một Optional Exam. Và giá trị expect lúc này là trạng thái OK và một object có dạng Json.

  • Còn đối với POST để test được thì trước hết ta phải tạo một phương thức để chuyển đổi chuỗi sang dạng Json như sau:

test Controller trong Spring Boot với @WebMvcTest

Sau đó ta mới tiến hành test phương thức create như sau:

test Controller trong Spring Boot với @WebMvcTest

Đối với phương thức create thì ở phương thức mvc.perform() ta truyền thêm object exam1 dưới dạng Json vào cho phương thức post để tiến hành kiểm tra việc thêm mới với giá trị mong muốn trả về là trạng thái Created cùng với object vừa mới được tạo dưới dạng Json

Author: Nguyễn Minh Quân

Đăng ký nhận bộ tài liệu kỹ năng dành cho lập trình viên (video hướng dẫn + slide) tại đây


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.