테스트 코드 작성...

엉금엉금·2022년 7월 12일
0

오늘 만난 문제

목록 보기
13/24

진행중인 프로젝트에서 Controller의 요청을 받고 응답을 하는 메서드의 테스트 코드를 작성해 보았다.

@AutoConfigureMockMvc
@SpringBootTest
class RestaurantControllerV1Test {

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    RestaurantService restaurantService;

    @Autowired
    RestaurantRepository restaurantRepository;

    @BeforeEach
    void clear() {
        restaurantRepository.deleteAll();
    }

    @Test
    @DisplayName("POST /api/v1/restaurants 요청 시 식당 기본 정보가 DB에 저장된다.")
    void saveRestaurant() throws Exception {

        //given
        RestaurantSaveRequestDto clientRequest = new RestaurantSaveRequestDto("쉐이크쉑 청담점", 5000, 2000);
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(clientRequest);

        //when
        mockMvc.perform(post("/api/v1/restaurants")
                        .contentType(APPLICATION_JSON)
//                        .content("{\"name\":\"쉐이크쉑 청담점\", \"minOrderPrice\":\"5000\", \"deliveryFee\":\"2000\"}")
                        .content(json)
                )
                .andExpect(status().isOk())
                .andDo(print());

        // then
        assertEquals(1L, restaurantRepository.count());
        Restaurant restaurant = restaurantRepository.findAll().get(0);
        assertEquals("쉐이크쉑 청담점", restaurant.getName());
        assertEquals(5000, restaurant.getMinOrderPrice());
        assertEquals(2000, restaurant.getDeliveryFee());
    }
}
  • 하나의 Controller Method에 대한 테스트이다. 해당 메서드는 음식점에 대한 '이름', '최소주문금액', '배달비' 의 기본 정보를 통해서 음식점을 등록하고 성공 시 요청한 데이터와 저장된 음식점의 primary_id까지 함께 응답하는 기능을 갖는다.

  • SpringBootTest를 통해 Test를 진행하게 되는데 만일 이전에 @SpringBootTest 어노테이션을 사용할 경우에 MockMvc의 의존성 주입이 이뤄지지 않을 수 있기 때문에 @AutoConfigureMockMvc 어노테이션을 사용한다.

  • 테스트의 내용은 클라이언트에서 전달하는 데이터를 ObjectMapper를 통하여 JSON으로 만들고 MockMvc를 통해서 요청을 하고 DB에 데이터가 한 개만 들어있는지 그리고 해당 데이터를 가져와 요청 시에 보낸 데이터와 같은지 확인하는 것이다.

  • 'content'를 주석에서 보는 것과 같이 단순 문자열로 처리하여 보낼 수도 있지만 ObjectMapper를 이용하면 더욱 편하고 가독성이 좋게 테스트를 진행시킬 수 있다.

  • 아쉬운 점

    • 프로젝트 진행 시 테스트 코드를 작성하면서 개발 했으면 하는 마음이 들었다.
    • 아직 자주 접하지 않아 하는 얘기일 수 있지만 아직 따라만 해볼 수 있다는게 아쉬웠다.
      (위 테스트 코드 말고도 하나 더 작성한 테스트 코드가 있는데 ObjectMapper를 이용해 json을 만들고 요청 데이터로 처리하는데 문제가 있는 것 같다. 아마 내일을 그 부분을 집중적으로 다루지 않을까 싶다. 할꺼 많다 좋다!ㅋㅋㅋ)
profile
step by step

0개의 댓글