我正在尝试测试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;
}
我确信它必须非常简单,但我找不到解决方案。
答案 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);
我希望这能解决你的问题。