2013-03-05 221 views
1

是否有单元测试过滤器如下?如何Junit测试servlet-filters

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, 
    ServletException { 
    HttpServletRequest request = (HttpServletRequest) req; 
    HttpServletResponse response = (HttpServletResponse) res; 
    String param = request.getParameter("param"); 

    if (param == null) { 
     response.sendError(400, "param can't be null"); 
     return; 
    } 
+0

看看这一个:http://stackoverflow.com/questions/11451917/how-do-i-unit-test-a-serlvet-filter-with-junit – 2013-03-05 16:07:20

回答

4

是的,这里有一种方法。在这里我嘲笑HttpServletRequest和HttpServletResponse,并通过定义期望来断言方法调用。在这里我使用JMock。

public class SampleFilterTest { 


    private Mockery context = new Mockery(); 

    private SampleFilter sampleFilter = new SampleFilter(); 
    private HttpServletRequest request; 
    private HttpServletResponse response; 


    @BeforeMethod 
    public void setUp() throws Exception { 
    request = context.mock(HttpServletRequest.class); 
    response = context.mock(HttpServletResponse.class); 
    } 


    @Test 
    public void sampleFilterTest() throws IOException, ServletException { 
    context.checking(new Expectations() {{ 
     oneOf(request).getParameter("param"); 
     will(returnValue(null)); 
     oneOf(response).sendError(400, "param can't be null"); 
    }}); 
    sampleFilter.doFilter(request, response, null); 
    } 
} 

在这里我说的时候request.getParmeter被称为与“参数”,然后返回null,并response.sendError,400,和“参数不能为空”参数,应该叫。