我是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");
我试图找出可能是这背后的原因,并发现标题本身没有设置。这背后应该是什么原因以及在这种情况下如何测试代码。
答案 0 :(得分:3)
rsp.addHeader
也是一种模拟方法,您设置的值不会通过rsp.getHeader
返回。但是您可以使用verify
方法验证模拟对象上的方法是否被调用。如果您确实希望addHeader
与getHeader
一起使用,则应考虑使用由真实对象支持的间谍对象。我verify
使用addHeader
使用正确的参数调用verify(rsp).addHeader(...)
。