3

以下のようにフィルターをユニットテストする方法はありますか?

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

1 に答える 1

4

はい、あります。ここに 1 つの方法があります。ここでは、HttpServletRequest と HttpServletResponse をモックし、expectation を定義してメソッド呼び出しをアサートしています。ここでは 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 が「param」で呼び出されたときに null を返し、response.sendError を 400 で返し、「param can't be null」パラメータを呼び出す必要があると言っています。

于 2013-03-06T07:41:49.843 に答える