模拟的HttpServletRequest没有返回预期的方法值

时间:2019-07-08 16:33:51

标签: http junit mockito

我在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")

1 个答案:

答案 0 :(得分:1)

枚举值永远不等于字符串。 HttpMethod.GET是一个枚举值。 httpRequest.getMethod()是一个字符串。