模拟的 HttpServletRequest 未返回预期的方法值



我在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()是一个字符串。

相关内容

  • 没有找到相关文章