02. 알바콘 JAVA REBOOT

코드 굽는 제빵사·2021년 1월 3일
0

개발일기

목록 보기
11/13

토요일 오후부터 일요일 오전까지!

내가 만들고 있는 스프링 프로젝트의 Controller를 단위 테스트 하는데 문제가 생겼다. 위와 같은 400 Error를 계속 받고 있었다.

포스트맨으로 테스트 할때는!

너무나 잘되는 것이다. 스프링서버 작동 한 다음에 포스트맨으로 할 때는 문제가 없는데......
대체 왜 이런 것인지? 수 많은 검색을 했다 사실 무엇이 문제인지 몰랐다.

mockmvc post 400 error, mockmvc response null 등등 mockmvc를 처음 쓰니 mockmvc를 키워드로 계속 검색을 했었습니다. 왜냐하면 포스트맨으론 작동이 되고 테스트툴을 사용 할때 안되던거라 코드에 문제가 있을거라곤 생각하지 못했습니다.

아래의 코드를 테스트 하려고 했습니다.
단순하게 JSON객체를 받아서 타입을 변환해서 저장하고 아이디 값을 돌려주는 로직입니다.

@PostMapping("/api/v1/users")
    public CreateUserResponse registerUserV1(@RequestBody @Valid CreateUserRequest request) {
        Long registerUserId = userCommandService.register(transferRequestToDto(request));
        return new CreateUserResponse(registerUserId);
    }

mockito를 사용해서 service에 mockbean을 주입해서 요청이 오면 Long타입의 1을 돌려주고
그것을 저장해서 내보내는 로직입니다.

@Test
    public void registerUserController() throws Exception {
        //give
        String content = asJsonString(new CreateUserController.CreateUserRequest("Hakim"));
        when(userCommandService.register(any(UserCommandDto.class))).thenReturn(1L);
        mockMvc.perform(post("/api/v1/users")
                .contentType(MediaType.APPLICATION_JSON)
                .content(content))
                .andDo(print())
                .andExpect(status().isOk());
    }

문제는 !! lombok이었다.

아직 error 메시지를 보는 훈련이 1도 안된 것 같다. Error하면 빨간글씨 위주로 봤는데..처음부터 꼼꼼히 봐야겠다 아무래도 영어다보니 Skip...을해서 그런것 같다 유저리퀘스트 객체가 생성되지 않아서 생기는 오류라고 한다. 그래서 어 왜? 포스트맨에선 잘 되었는데 이 동네는 안 되는거지? 라고 생각이 들었다.

나와 비슷한 곤경을 겪었던 외국 사람! 이걸 보면 한방에 해결

결론은 NoArgsConstructor가 없어서.. 내가 다른 생성자를 생성해줘서 기본 생성자가 없어서 되지 않았던 이야기이다. 직접 호출 할땐 호출이 되고 @Webmvc테스트 일때 안되는 이유는 차후 알아 보도록 하겠다!

이젠 테스트 잘 통과한다!

어제 오늘 얻은 교훈 Error 메시지를 처음부터 끝까지 꼼꼼하게 잘 읽어보자! 괜히 빨간 글씨만 보고 그것을 키워드로 검색을 하니 제대로 된 검색이 될리가 없지...해결도 하고 교훈도 얻고 다행이다!

0개의 댓글