안녕하세요! 이번 포스팅에서는 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
을 넣어줍니다.
⭕ 확인
제대로 적용이 되는 것을 확인할 수 있습니다!
혹시 글을 읽으면서 잘못된 내용이 있으면 댓글로 알려주시면 감사하겠습니다! 읽어주셔서 감사합니다! 😊
'Backend > SpringBoot' 카테고리의 다른 글
SpringBoot API 요청 값 검증하고 Validation Exception Handing하기 (1) | 2020.04.14 |
---|---|
SpringBoot의 POI을 이용해서 엑셀 파일 읽기 (9) | 2020.03.30 |
SpringBoot의 AOP을 이용해서 로그 남기기 (1) | 2020.03.23 |
SpringBoot의 Jsoup을 이용해 코로나 현황 크롤링하기 프로젝트 (3) | 2020.03.08 |
SpringBoot의 Querydsl을 이용하여 동적쿼리(Dynamic SQL) 작성하기 (1) | 2020.02.26 |