Junit:无法在响应中测试标头信息

时间:2014-05-12 09:56:41

标签: java junit mockito junit4 testcase

我是JUnit的新手。我正在尝试为java过滤器编写测试用例。以下是过滤器代码 -

    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException,
        IOException {
    response.addHeader("Access-Control-Allow-Origin", "*");
    if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {
        response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        response.addHeader("Access-Control-Allow-Headers", "X-Requested-With,Origin,Content-Type, Accept, authSessionId");
    }
    filterChain.doFilter(request, response);
}

以下是我写的测试用例 -

   @Test
   public void testSomethingAboutDoFilter() throws ServletException, IOException {
    CorsFilter cf = new CorsFilter();
    HttpServletRequest req = mock(HttpServletRequest.class);
    HttpServletResponse rsp = mock(HttpServletResponse.class);
    FilterChain mockChain = mock(FilterChain.class);
    rsp.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
    when(req.getHeader("Access-Control-Request-Method")).thenReturn("abc");
    when(req.getMethod()).thenReturn("OPTIONS");
    cf.doFilterInternal(req, rsp, mockChain);
    String rspHeader = rsp.getHeader("Access-Control-Allow-Methods");
    System.out.println(rspHeader);
    }

我的想法是检查添加到响应中的内容并匹配它以验证测试用例。但由于某种原因,当我检查时,我会变为空 -

   rsp.getHeader("Access-Control-Allow-Methods");

我试图找出可能是这背后的原因,并发现标题本身没有设置。这背后应该是什么原因以及在这种情况下如何测试代码。

1 个答案:

答案 0 :(得分:3)

rsp.addHeader也是一种模拟方法,您设置的值不会通过rsp.getHeader返回。但是您可以使用verify方法验证模拟对象上的方法是否被调用。如果您确实希望addHeadergetHeader一起使用,则应考虑使用由真实对象支持的间谍对象。我verify使用addHeader使用正确的参数调用verify(rsp).addHeader(...)