[스프링, 스프링부트] Spring test - 테스트 코드의 기초(5) [CRUD 테스트]

2023. 8. 9. 10:31·Spring/테스트 코드
반응형

이번 포스트에서는 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(스프링) - 테스트 코드의 기초(4)

이번 포스트에서는 저번에 이어 mock을 사용한 테스트 설명을 추가적으로 이어간다. 1. Mockito.mock 사용방법 > mock으로 모의객체 생성 Mockito.mock은 Mockito 라이브러리에서 제공하는 기능 중 하나로,

curiousjinan.tistory.com

 

반응형

'Spring > 테스트 코드' 카테고리의 다른 글

[스프링, 스프링 부트] Spring test - when()에서 발생한 에러  (0) 2023.08.22
[스프링, 스프링부트] Spring test - 스프링 시큐리티의 authentication객체를 어떻게 사용해야 할까?  (0) 2023.08.22
[스프링, 스프링 부트] 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
'Spring/테스트 코드' 카테고리의 다른 글
  • [스프링, 스프링 부트] Spring test - when()에서 발생한 에러
  • [스프링, 스프링부트] Spring test - 스프링 시큐리티의 authentication객체를 어떻게 사용해야 할까?
  • [스프링, 스프링 부트] Spring test - 테스트 코드의 기초(4) [mock 테스트]
  • [스프링, 스프링 부트] Spring test - 테스트 코드의 기초(3) [Mockito.when() 메서드]
Stark97
Stark97
문의사항 또는 커피챗 요청은 링크드인 메신저를 보내주세요! : https://www.linkedin.com/in/writedev/
  • Stark97
    오늘도 개발중입니다
    Stark97
  • 전체
    오늘
    어제
    • 분류 전체보기 (247)
      • 개발지식 (20)
        • 스레드(Thread) (8)
        • WEB, DB, GIT (3)
        • 디자인패턴 (8)
      • JAVA (21)
      • Spring (88)
        • Spring 기초 지식 (35)
        • Spring 설정 (6)
        • JPA (7)
        • Spring Security (17)
        • Spring에서 Java 활용하기 (8)
        • 테스트 코드 (15)
      • 아키텍처 (6)
      • MSA (15)
      • DDD (11)
      • gRPC (9)
      • Apache Kafka (18)
      • DevOps (23)
        • nGrinder (4)
        • Docker (1)
        • k8s (1)
        • 테라폼(Terraform) (12)
      • AWS (32)
        • ECS, ECR (14)
        • EC2 (2)
        • CodePipeline, CICD (8)
        • SNS, SQS (5)
        • RDS (2)
      • notion&obsidian (3)
      • AI 탐험대 (1)
      • 팀 Pulse (0)
  • 링크

    • notion기록
    • 깃허브
    • 링크드인
  • hELLO· Designed By정상우.v4.10.0
Stark97
[스프링, 스프링부트] Spring test - 테스트 코드의 기초(5) [CRUD 테스트]
상단으로

티스토리툴바