2017-04-10 1 views
0

스프링 MVC 애플리케이션을 테스트하려고하는데 요청을 조롱하는 방법을 모르므로 isRequestedSessionIdValid가 true를 반환합니다. mock과 함께 isRequestedSessionIdValid 사용하기

내 테스트입니다 :

@Test 
public void testLogin() throws Exception { 
    final String url = "/secure/logged.do"; 
    getMockMvc().perform(get(url).with(user("admin123").password("admin123").roles("0"))) 
    .andDo(print()) 
    .andExpect(redirectedUrl("/secure/home.do")) 
    .andDo(print()); 
} 

문제는 내 세션 HandlerInterceptorAdapter 내 어떤 세션 페이지로 리디렉션되는 것을 :

@Override 
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { 
    try { 
     if (!request.isRequestedSessionIdValid()) { 
      response.sendRedirect(request.getContextPath() + LOGIN_URL); 
      return false; 
     } 

     // more code 
    } catch (final IOException e) { 
     // more code 
     return false; 
    } 

    return true; 
} 

내가, 아주 쉽게하는 확신하지만, 나는 해결책을 찾지 못한다.

+0

mockito를 사용할 수 있습니까? 이 작업은 매우 쉽습니다. mockito를 사용하고 싶다면 질문에 대답 할 수 있습니다. – kodmanyagha

+0

네, 가능합니다, 고마워요 :) – maqjav

답변

1

preHandle (req, resp, handler) 메소드는 순수한 자바 메소드입니다. 직접 테스트 할 수 있습니다.

HttpServletRequest mockRequest = Mockito.mock(HttpServletRequest.class); 
HttpServletResponse mockResponse = Mockito.mock(HttpServletResponse.class); 
Object handle = Mockito.mock(Object.class); 

//most important thing is here 
Mockito.when(mockRequest.isRequestedSessionIdValid()).thenReturn(true); 
boolean result = new YourClass().preHandle(mockRequest, mockResponse, handle); 
Assert.assertEquals(true, result); 

이 질문이 귀하의 질문에 도움이되기를 바랍니다.

+0

고마워요! 그것은 효과가 있었고 이것이 내가 바라는 바를 그대로 받아 들였습니다. 그러나, 나는'MockHttpSession'을 추가하는 더 좋은 솔루션을 발견했다 : perform (get (url) .session (new MockHttpSession()) ...'이제'request.isRequestedSessionIdValid()'는 항상 true를 리턴한다. – maqjav

+0

일하게되어 기쁩니다 :) 감사합니다. – kodmanyagha