-
[Project] Controller Test Code - MockHttpSessionProject 2024. 6. 21. 14:45728x90
@WebMvcTest 어노테이션을 사용해서 컨트롤러 테스트를 할 수 있다.
세션 기반으로 사용자 인증을 구현하였기에 세션 인증 테스트를 어떻게 해야 하는지 알아보았다.
2가지 방법이 있다.
1. Map<String, Object> 로 세션 속성 저장하기
2. MockHttpSession 사용하기
1. Map<string, object>
@ExtendWith(SpringExtension.class) @WebMvcTest(CartApiController.class) public class CartApiControllerTest { @Autowired private MockMvc mockMvc; private Map<String, Object> sessionAttributes; @BeforeEach void setUp(){ sessionAttributes = new HashMap<>(); sessionAttributes.put("MemberId", 999L); MemberDto memberDto = MemberDto.builder() .id(999L) .email("test@naver.com") .password("asdf7890*") .build(); sessionAttributes.put("MemberDto", memberDto); } ... @DisplayName("장바구니 추가 성공 테스트") @Test public void saveCart() throws Exception{ doNothing().when(cartService).save(any(), any()); String content = objectMapper.writeValueAsString(cartRequestDto); mockMvc.perform(post("/api/cart") .sessionAttrs(sessionAttributes) .content(content) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andDo(print()); } }
직접 Map을 만들어 세션을 만든다면 sessionAttrs()메서드에 파라미터를 넘겨주면 된다.
2. MockHttpSession 사용하기
@ExtendWith(SpringExtension.class) @WebMvcTest(CartApiController.class) public class CartApiControllerTest { @Autowired private MockMvc mockMvc; private MockHttpSession mockHttpSession; @BeforeEach void setUp(){ MemberDto memberDto = MemberDto.builder() .id(999L) .email("test@naver.com") .password("asdf7890*") .build(); mockHttpSession = new MockHttpSession(); mockHttpSession.setAttribute("MemberId", 999L); mockHttpSession.setAttribute("MemberDto", memberDto); } ... @DisplayName("장바구니 추가 성공 테스트") @Test public void saveCart() throws Exception{ doNothing().when(cartService).save(any(), any()); String content = objectMapper.writeValueAsString(cartRequestDto); mockMvc.perform(post("/api/cart") .session(mockHttpSession) .content(content) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andDo(print()); } }
mockHttpSession을 사용하면 기존에 세션을 저장했던 것 처럼 setAttribute()메서드로 저장하고,
mockMvc의 session메소드 파라미터로 넘겨주면 된다.
728x90'Project' 카테고리의 다른 글
[Project] NCP centOS7 nginx설치 (0) 2024.07.02 [Project] "Executing an update/delete query" 오류 (0) 2024.07.01 [Project] Image전송 (0) 2024.06.17 [Project] CentOS7 JDK17 설치 (1) 2024.06.08 [Project] Naver cloud platform 서버 생성 (0) 2024.06.08