TIL

[TIL] 반성의 TIL... Junit MockMvc.perform 에서 session 사용하기..

봄봄로그 2023. 10. 12. 20:00

에궁.. 오늘은 배운..것도 배운 거지만 진짜 반성해야된다.

어줍잖게 테스트코드를 써놓고 추가개발 할 때는 사용하지 않으면 빌드에 영향을 준다는 사실을 일하면서 내내 겪어놓고 또 이랬다~~

원래 문제는 travis연동하면서 발견한거라 혹시나 했는데 결국 빌드시 테스트코드의 오류였다.

초기 개발때 사용한 부분인데, 추가개발 할 때는 포스트맨과 웹으로만 하다보니까 잊혀졌던..^^

 

초기개발에 없던 parameter가 추가되면서 테스트코드에도 추가를 해줘야 하는데, 이게이게.. 세션을 가져오는 거라 조금 헤맸다ㅜㅜ

 

    @PutMapping("url")
    public Long update(@RequestBody Member member, @LoginUser SessionUser user) {
        return 1;
    }

이런 코드라 가정할 때, 초기엔 member만 넘겨주면 되는데 추가로 session에 담은 저 user가 비어서 계속 테스트에 통과하지 못했다. 

그리고 저 user는 session이기 때문에 member와 같은 방법으로 넘겨주는 것이 아니라 session으로 넘겨줘야 한다. 써놓고보면 너무 당연한 얘기들이다 ㅎ;;

 

        //객체 생성
        SessionUser sessionUser = new SessionUser(
                User.builder().name("작성자").email("aaa").role(Role.USER).build()
        );
        
        
        
        // mock http session 을 생성한다!!!!!!!
        MockHttpSession session = new MockHttpSession();
        
        session.setAttribute("user",sessionUser);
        session.putValue("user",sessionUser);
        
//        >>> 이 두개의 차이를 모르겠는데 테스트 해보니 
        setAttribute와, putValue 모두 "user"에 담아주기만 하면 값은 넘어간다.
        
        
        
        mockMvc.perform(put(url)
                        .contentType(MediaType.APPLICATION_JSON_VALUE)
                        .session(session) // <<<<<<<<<<<<<<<<<<< 추가된 부분
                        .content(new ObjectMapper().writeValueAsString(requestDto)));
                .andExpect(status().isOk());