简体   繁体   English

我如何测试doFilter方法?

[英]How can i test the doFilter method?

I try to test this method: 我尝试测试此方法:

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

Here my test: 这是我的测试:

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

but the last Mockito.verify don't run. 但最后一个Mockito.verify不会运行。 I don't also understand when I do 我什么时候也不懂

request.getAttribute("connected")

I obtain "toto" but null when I do 我获得"toto"但获得null

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

Can you explain and help me please? 您能给我解释一下吗? Thanks 谢谢

The last Mockito.verify(chain, Mockito.times(1)).doFilter(request, response); 最后一个Mockito.verify(chain, Mockito.times(1)).doFilter(request, response); fails because, request's session contains the key/value "connected" , so doFilter didn't called. 失败,因为请求的会话包含键/值“ connected” ,因此未调用doFilter

What about request.getAttribute("connected") vs request.getSession(true).getAttribute("connected") , I got null for the first, and toto for the second. 怎么样request.getAttribute("connected") vs request.getSession(true).getAttribute("connected") ,我第一个为null ,第二个为toto

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM