Пример того, как написать модульный тест в Spring Boot.
// UserController.java @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/users/{id}") public User findUser(@PathVariable Long id) { return userService.findById(id); } } // UserService.java @Service public class UserService { @Autowired private UserRepo userRepo; public User findById(Long id) { return userRepo.findById(id); } } // UserRepo.java @Service public class UserRepo { public User findById(Long id) { return User.builder() .id(id) .name("Mac") .build(); } } // User.java @Data @Builder public class User { private Long id; private String name; }
- Тестовый класс обслуживания
@RunWith(SpringRunner.class) @SpringBootTest public class UserServiceTest { @InjectMocks private UserService userService; @Mock private UserRepo userRepo; @Test public void testFindById() { Mockito.when(userRepo.findById(Mockito.anyLong())).thenReturn(User.builder() .id(1L) .name("Mac") .build()); User user = userService.findById(1L); Assert.assertEquals(1L, user.getId().longValue()); Assert.assertEquals("Mac", user.getName()); Mockito.verify(userRepo, Mockito.times(1)).findById(Mockito.any()); } }
- Класс тестового контроллера
@RunWith(SpringRunner.class) @WebMvcTest(UserController.class) public class UserControllerTest { @Autowired private MockMvc mockMvc; @MockBean private UserService userService; @Autowired private ObjectMapper objectMapper; @Test public void testFindUser() throws Exception { User user = User.builder() .id(1L) .name("Mac") .build(); Mockito.when(userService.findById(Mockito.any())).thenReturn(user); mockMvc.perform(MockMvcRequestBuilders.get("/users/1")) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content() .json(objectMapper.writeValueAsString(user))); } }
Примечание
@RunWith(SpringRunner.class )
требуется, если вы используете JUnit 4.- По умолчанию
@SpringBootTest
не запускает сервер, но вы можете настроить его с помощью атрибутаwebEnvironment
.
Ссылка: https://stackoverflow.com/questions/44200720/difference-between-mock-mockbean-and-mockito-mock
Оригинал: “https://dev.to/mackittipat/spring-boot-unit-test-1o2a”