반응형
이번 포스트에서는 CRUD 테스트를 작성해 보자
1. GET 테스트
- 이 테스트에서는 GET 요청을 사용하여 특정 사용자를 가져오는 API를 테스트한다.
- 우선 userService.findUserById() 메소드를 모킹하여 항상 동일한 사용자 정보를 반환하도록 한다.
- 그 후에 mockMvc.perform()을 사용하여 GET 요청을 보내고, andExpect()를 통해 응답 상태와 응답 본문이 예상된 값과 일치하는지 검증한다.
@Test
public void testGetUser() throws Exception {
User user = new User("john", "doe", "john.doe@gmail.com");
Mockito.when(userService.findUserById(anyLong())).thenReturn(user);
mockMvc.perform(get("/api/v1/users/1")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.firstName", is(user.getFirstName())))
.andExpect(jsonPath("$.lastName", is(user.getLastName())))
.andExpect(jsonPath("$.email", is(user.getEmail())));
}
2. POST 테스트
- 이 테스트에서는 POST 요청을 사용하여 새 사용자를 생성하는 API를 테스트한다.
- 우선 userService.createUser() 메소드를 모킹하여 입력으로 받은 사용자를 그대로 반환하도록 한다.
- 그 후에 mockMvc.perform()을 사용하여 POST 요청을 보내고, andExpect()를 통해 응답 상태와 응답 본문이 예상된 값과 일치하는지 검증한다.
@Test
public void testCreateUser() throws Exception {
User user = new User("john", "doe", "john.doe@gmail.com");
Mockito.when(userService.createUser(any(User.class))).thenReturn(user);
mockMvc.perform(post("/api/v1/users")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(user)))
.andExpect(status().isCreated())
.andExpect(jsonPath("$.firstName", is(user.getFirstName())))
.andExpect(jsonPath("$.lastName", is(user.getLastName())))
.andExpect(jsonPath("$.email", is(user.getEmail())));
}
3. PUT 테스트
- 이 테스트에서는 PUT 요청을 사용하여 기존 사용자 정보를 수정하는 API를 테스트한다.
- 우선 userService.updateUser() 메소드를 모킹하여 입력으로 받은 사용자를 그대로 반환하도록 한다.
- 그 후에 mockMvc.perform()을 사용하여 PUT 요청을 보내고, andExpect()를 통해 응답 상태와 응답 본문이 예상된 값과 일치하는지 검증합니다.
@Test
public void testUpdateUser() throws Exception {
User user = new User("john", "doe", "john.doe@gmail.com");
Mockito.when(userService.updateUser(anyLong(), any(User.class))).thenReturn(user);
mockMvc.perform(put("/api/v1/users/1")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(user)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.firstName", is(user.getFirstName())))
.andExpect(jsonPath("$.lastName", is(user.getLastName())))
.andExpect(jsonPath("$.email", is(user.getEmail())));
}
4. DELETE 테스트
- 이 테스트에서는 DELETE 요청을 사용하여 사용자를 삭제하는 API를 테스트한다.
- 우선 userService.deleteUser() 메소드를 모킹하여 아무런 동작도 수행하지 않도록 한다.
- 그 후에 mockMvc.perform()을 사용하여 DELETE 요청을 보내고, andExpect()를 통해 응답 상태가 OK(200)인지 검증한다.
@Test
public void testDeleteUser() throws Exception {
Mockito.doNothing().when(userService).deleteUser(anyLong());
mockMvc.perform(delete("/api/v1/users/1")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
}
이런식으로 CRUD의 테스트 코드 작성방식은 모두 비슷비슷하다.
2023.08.09 - [Spring 테스트코드] - Spring(스프링) - 테스트 코드의 기초(4)
반응형
'Spring > 테스트 코드' 카테고리의 다른 글
[스프링, 스프링 부트] Spring test - service 테스트에서 만난 오류 (0) | 2023.08.16 |
---|---|
[스프링, 스프링 부트] Spring test - Mock에 대한 이해 (0) | 2023.08.09 |
[스프링, 스프링 부트] Spring test - 테스트 코드의 기초(4) [mock 테스트] (0) | 2023.08.09 |
[스프링, 스프링 부트] Spring test - 테스트 코드의 기초(3) [Mockito.when() 메서드] (0) | 2023.08.09 |
[스프링, 스프링 부트] Spring test - 테스트 코드의 기초(2) [MockMvc, MockBean] (0) | 2023.08.09 |