웹 개발/Spring Framework

JUnit에서 세션 생성을 어떻게 해야할까?(JUnit에서 session 처리)

희랍인 조르바 2018. 5. 23. 14:14

스택오버플로 해당 url을 참고했다.


https://stackoverflow.com/questions/27102878/how-to-create-session-in-spring-junit


회사 프로젝트에서 로그인 정보(VO로 관리)는 session으로 관리하고 있다. 


JUnit 테스트 중 DAO에서 세션정보를 바로 조회해서 쿼리를 날리는 부분이 있었다.


유닛 테스트를 돌리면서 세션을 만들어주고 주입하는 방법을 찾아야했다. 


Mock을 활용하면 가능했다!


기쁨의 환호


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private LoginVO loginVO;
protected MockHttpSession session;
protected MockHttpServletRequest request;
 
@Before
public void setUp() throws Exception{
    loginVO = new LoginVO();
    loginVO.setGroupNum( "test" );
    loginVO.setCompNum( "chocolateCompany" );
    loginVO.setEmpNum( "zorba" );
    loginVO.setLanguage( "kr" );
    
    session = new MockHttpSession();
    session.setAttribute("loginVO", loginVO);
        
    request = new MockHttpServletRequest();
    request.setSession(session);
    RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));
}
 
@After
public void clear(){
    session.clearAttributes();
    session = null;
}
 
@Test
public void testSomeMethod(){
    
    List<Integer> receiveList = testDAO.getChocolateSession(); /* DAO에서 세션을 받고 처리하는 로직인 메서드 */
    assertTrue(receiveList != null);
    assertTrue(receiveList != 0);
}
cs



이 방법이면 세션이 형성되면서 테스트 속 실제 메서드에서 사용될 세션 값에 들어가게 된다.


MockHttpSession과 MockHttpServletRequest을 활용했다.


맵 형식으로 세션을 담을 수 있다.