我在Spring中有一个过滤器,它根据传入请求的方法类型执行一些逻辑。下面是过滤器代码:
public class TestFilter extends GenericFilterBean {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
if (HttpMethod.GET.equals(httpRequest.getMethod())) {
// do something
} else {
// do something else
}
chain.doFilter(request, httpResponse);
}
}
在上面的代码中,每当请求方法GET
时,我尝试在我的响应中设置一些名为GETHEADER
的标头,而它不会发生在POST
中。
我正在尝试使用以下测试用例代码对其进行测试:
@Mock
HttpServletResponse response;
@Mock
HttpServletRequest request;
@Mock
FilterChain chain;
@Autowired
TestFilter testFilter;
@Test
public void testGetRequest() throws Exception {
when(request.getMethod()).thenReturn(HttpMethod.GET.toString());
testFilter.doFilter(request, response, chain);
Assert.assertNotNull(response.getHeader("GETHEADER"));
}
在我的代码覆盖率中,我只能看到正在执行的 else 部分,而看不到 if 部分。是它没有返回我尝试提供的值,还是我的返回方式存在问题?
更新:尝试了这些,如下所示:
代码:if (HttpMethod.GET.toString().equals(httpRequest.getMethod()))
测试用例:when(request.getMethod()).thenReturn(HttpMethod.GET.toString())
也
代码:if ("GET".toString().equals(httpRequest.getMethod()))
测试用例:when(request.getMethod()).thenReturn("GET")
枚举值永远不会等于字符串。HttpMethod.GET
是一个枚举值。httpRequest.getMethod()
是一个字符串。