본문 바로가기

Backend/SpringBoot

SpringBoot의 MockHttpSession을 이용해서 JUnit Mock 테스트하기

MockHttpSession

 

안녕하세요! 이번 포스팅에서는 SpringBoot의 MockHttpSession를 이용해서 JUnit에서 Mock객체를 이용한 Test를 통과하는 방법에 대해 알아보겠습니다. 🤗


🤔 문제 상황

검증해야 할 메소드에 getAttribute()를 이용해서 세션을 가져오는 코드가 들어가는 경우가 있는데, JUnit으로 이 메소드를 Test를 하다 보면 세션에 null이 들어가서 NPE가 발생하는 경우가 종종 있습니다. 이럴 때 MockHttpSession을 유용하게 사용할 수 있습니다.

@GetMapping("/test")
public String test(HttpSession session){
    String id = (String) session.getAttribute("name");
    // 생략
}

 


👩‍💻 구현코드

private MockMvc mockMvc;
protected MockHttpSession session;

@Autowired
WebApplicationContext context;

@Before // 1
public void setUp() throws Exception{
  session = new MockHttpSession();

  session.setAttribute("name", "테스트");
}

@After // 2
public void clean(){
  session.clearAttributes(); 
}

@Test // 3
public void anything(){

    this.mockMvc = MockMvcBuilders.webAppContextSetup(context).build();

    // ...
    mockMvc.perform(post("url")
        .session(session) // 추가
        .content(content) 
        .contentType(MediaType.APPLICATION_JSON)
        .accept(MediaType.APPLICATION_JSON))
        .andExpect(status().isOk());
}

 

1) 테스트가 실행되기 전, MockHttpSession 객체를 만들어주고 값을 미리 세팅해줍니다. (@Before을 쓰지 않고 @Test 안에서 선언해도 무방합니다.)

2) 테스트가 완료되고 나면 만든 세션을 지워줍니다.

3) mockMvc에서 자체적으로 제공해주는 session()을 이용해서 값을 세팅해둔 MockHttpSession을 넣어줍니다.

 


⭕ 확인

제대로 적용이 되는 것을 확인할 수 있습니다!

혹시 글을 읽으면서 잘못된 내용이 있으면 댓글로 알려주시면 감사하겠습니다! 읽어주셔서 감사합니다! 😊