我正在尝试测试一个 spring MVC 应用程序,我不知道如何模拟请求,所以 isRequestSessionIdValid 返回 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());
}
问题是我的会话处理程序拦截器适配器正在重定向到我的无会话页面:
@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;
}
我相信这必须非常简单,但我找不到解决方案。
你的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);
我希望这能解决你的问题。