2013-03-05 2 views
1

다음과 같이 필터를 단위 테스트하는 방법이 있습니까?테스트 서블릿 필터를 Junit하는 방법

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 –

답변

4

예, 여기 있습니다. 여기서는 HttpServletRequest와 HttpServletResponse를 조롱하고 expectations.Here를 정의하여 메소드 호출에 대한 주장을하고 있습니다. 여기 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); 
    } 
} 

I 매개 변수 "PARAM은 null 일 수 없습니다"request.getParmeter는 null를 돌려 "PARAM"로 호출 할 때 말을하고, 400 response.sendError, 그리고하고는, 호출해야합니다.