我在Spring中有一个过滤器,该过滤器根据传入请求的Method类型执行一些逻辑。下面是过滤器代码:
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);
}
}
在以上代码中,我尝试在请求方法为GETHEADER
时在响应GET
中设置一些标头,而在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")
答案 0 :(得分:1)
枚举值永远不等于字符串。 HttpMethod.GET
是一个枚举值。 httpRequest.getMethod()
是一个字符串。