Xem toàn bộ series bài viết hướng dẫn xây dựng ứng dụng Questions Management tại đây.
Trong bài viết trước, chúng ta đã chuẩn bị tất cả các cấu hình cần thiết để có thể xây dựng API lấy tất cả các category có trong MongoDB database như: một đối tượng document Category chứa thông tin của một category, một CategoryRepository để thao tác với MongoDB, một CategoryController định nghĩa các API của Core Category Service sẽ bắt đầu với “/category” và thông tin về kết nối đến MongoDB server được cấu hình trong tập tin application.properties. Bây giờ, chúng ta sẽ tiến hành xây dựng API để này các bạn nhé!
Để xây dựng API lấy tất cả category, mình sẽ thêm mới một method để expose một GET request “/all” trong CategoryController:
1 2 3 4 |
@GetMapping("/all") public Flux<Category> findAllCategories() { } |
Vì Spring Data Mongo Reactive đã hỗ trợ cho chúng ta method tìm kiếm tất cả các category rồi nên việc của chúng ta chỉ là gọi để sử dụng mà thôi:
1 2 3 4 |
@GetMapping("/all") public Flux<Category> findAllCategories() { return categoryRepository.findAll(); } |
Rất đơn giản phải không các bạn?
Giả sử hiện tại trong database mình đang có những category sau:
thì khi mình chạy request để lấy tất cả category đang có, kết quả sẽ là:
Bây giờ chúng ta sẽ thêm mới Unit Test cho code mà chúng ta vừa thêm vào, các bạn nhé!
Trong bài viết trước, mình đã tạo mới class test cho CategoryController tên là CategoryControllerTest, đối tượng Mock cho CategoryRepository và inject đối tượng Mock này vào class CategoryController:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package com.huongdanjava.categoryservice; import org.mockito.InjectMocks; import org.mockito.Mock; import com.huongdanjava.categoryservice.repository.CategoryRepository; public class CategoryControllerTest { @Mock private CategoryRepository categoryRepository; @InjectMocks private CategoryController categoryController; } |
Khởi tạo mock mỗi khi chạy một test case:
1 2 3 4 |
@Before public void init() { MockitoAnnotations.initMocks(this); } |
Giờ mình sẽ thêm mới một phương thức để test cho phương thức của findAllCategories() của class CategoryController như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
@Test public void testFindAllCategories() { // Create category document to return when using findAll Category category = new Category(); category.setId("123"); category.setCode("ABC"); category.setName("ZXC"); // Mock findAll() method of CategoryRepository to return a Flux when(categoryRepository.findAll()).thenReturn(Flux.just(category)); // Call method Flux<Category> categories = categoryController.findAllCategories(); Category result = categories.blockFirst(); // Assertions assertEquals("123", result.getId()); assertEquals("ABC", result.getCode()); assertEquals("ZXC", result.getName()); } |
Chạy “Maven test” trong STS hoặc “mvn test” với Apache Maven, các bạn sẽ không lỗi nào cả.