使用isRequestedSessionIdValid和mock

时间:2017-04-10 11:10:26

标签: spring junit mockito

我正在尝试测试spring MVC应用程序而我不知道如何模拟请求,因此isRequestedSessionIdValid返回true。

这是我的测试:

@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正在重定向到我的no会话页面:

@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;
}

我确信它必须非常简单,但我找不到解决方案。

1 个答案:

答案 0 :(得分:1)

你的preHandle(req,resp,handler)方法是纯java方法。你可以直接测试它。

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);

我希望这能解决你的问题。