2015-12-12 41 views
0

我嘗試測試這種方法:我如何測試doFilter方法?

public void doFilter(final ServletRequest request, final ServletResponse response, 
    final FilterChain chain) throws IOException, ServletException { 

    final HttpServletRequest httpRequest = (HttpServletRequest) request; 
    final HttpServletResponse httpResponse = (HttpServletResponse) response; 

    if (httpRequest.getSession(true).getAttribute("connected") == null) { 
     httpResponse.sendRedirect(request.getServletContext().getContextPath() + "/"); 
    } else { 
     chain.doFilter(request, response); 
    } 
} 

這裏我的測試:

@Test 
public void testDoFilter() throws IOException, ServletException { 

    MockServletContext servletContext = new MockServletContext(); 
    MockHttpServletRequest request = new MockHttpServletRequest(servletContext); 
    MockHttpServletResponse response = new MockHttpServletResponse(); 
    MockHttpSession session = new MockHttpSession(); 
    FilterChain chain = Mockito.mock(FilterChain.class); 
    String url = "/private/"; 
    request.setContextPath("/private/"); 

    UserFilter userfilter = new UserFilter(); 
    userfilter.doFilter(request, response, chain); 
    Mockito.verify(chain, Mockito.times(0)).doFilter(request, response); 
    request.setSession(session); 
    request.getSession().setAttribute("connected", "toto"); 
    Mockito.verify(chain, Mockito.times(1)).doFilter(request, response); 
} 

但最後Mockito.verify不運行。我不也明白,當我做

request.getAttribute("connected") 

我獲得"toto"null當我做

request.getSession(true).getAttribute("connected"). 

你能否解釋一下,幫我好嗎? 感謝

回答

0

的,因爲請求的會話包含鍵/值「連接」,所以doFilter沒有所謂的最後Mockito.verify(chain, Mockito.times(1)).doFilter(request, response);失敗。

request.getAttribute("connected")request.getSession(true).getAttribute("connected")怎麼樣,我第一個得到null,第二個得到toto