ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring boot api test code
    Computer Science/Spring boot 2022. 10. 6. 14:44

    json을 포함하여 body를 받아야하는 post api로 test를 하겠다.

     

    test를 진행할 controller 이다.

     

    package com.lof.lofserver.controller.user;
    
    import com.lof.lofserver.controller.user.request.UserInfoDto;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.*;
    
    @RestController
    @RequestMapping("/v1/user")
    public class UserController {
    
        @PostMapping("/create")
        public ResponseEntity<?> createUser(@RequestBody UserInfoDto userInfoDto){
            return null;
        }
    }

    test 코드이다.

     

    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.lof.lofserver.controller.user.request.UserInfoDto;
    import org.junit.jupiter.api.DisplayName;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
    import org.springframework.test.web.servlet.MockMvc;
    import org.springframework.test.web.servlet.ResultActions;
    import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
    import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
    
    @WebMvcTest(controllers = UserController.class)
    class UserControllerTest {
    
        @Autowired
        private MockMvc mvc;
    
        @Autowired
        private ObjectMapper objectMapper;
    
        @Test
        @DisplayName("유저 생성 테스트")
        public void userCreate() throws Exception{
            //given
            String googleAccessToken = "googleAccessToken";
            String fcmToken = "fcmToken";
            UserInfoDto userInfoDto = new UserInfoDto(googleAccessToken, fcmToken);
    
            //when
            ResultActions resultActions = mvc.perform(
                    MockMvcRequestBuilders.post("/v1/user/create")
                            .contentType("application/json")
                            .content(objectMapper.writeValueAsString(userInfoDto)));
    
            //then
            resultActions.andExpect(MockMvcResultMatchers.status().isOk());
        }
    
    }

     

    대부분의 test code는 given, when, then으로 구성을 하는것이 좋으며

    @WebMvcTest 어노테이션으로 test를 진행할 controller를 등록하고

    MockMvc 를 이용하여서 test를 하였다.

    ObjectMapper는 객체를 json string화 하기 위해서 사용하였다.

     

    static 을 사용하면 조금더 깔끔해진다.

    import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
    public void userCreate() throws Exception{
        //given
        String googleAccessToken = "googleAccessToken";
        String fcmToken = "fcmToken";
        UserInfoDto userInfoDto = new UserInfoDto(googleAccessToken, fcmToken);
    
        //when
        ResultActions resultActions = mvc.perform(
                post("/v1/user/create")
                .contentType("application/json")
                .content(objectMapper.writeValueAsString(userInfoDto)));
    
        //then
        resultActions.andExpect(status().isOk());
    }
Designed by Tistory.