首页 > 解决方案 > 如何模拟 RequestContext.getCurrentContext()?

问题描述

我是新来的蜜蜂,遇到了一个关于 Zuul 的问题。我首先为 Zuul 过滤器编写测试用例我想知道我是否需要为我的 Zuul 过滤器编写 UT,如果是,那么我正在编写shouldFilter()我必须模拟的 zuul 过滤器方法的单元测试requestContext

我怎样才能实现这个目标?

我已经嘲笑过HttpServletRequestRequestContext但是当我进入调试模式时,它显示为null ..我错过了什么?

@Override
public boolean shouldFilter() {

    RequestContext requestContext = RequestContext.getCurrentContext();
    HttpServletRequest request = requestContext.getRequest();
    if (request.getHeader(Constants.AUTHORIZATION.getValue()) != null) {
        return true;
    }
    return false;
}

这是我原来的方法

@Test
public void testShouldFilter(){

    MockHttpServletRequest request = new MockHttpServletRequest(context);
    request.addHeader("Authorization","123");
    RequestContext rc = new RequestContext();
    rc.setRequest(request);

    Mockito.when(requestContext.getCurrentContext().getRequest()).thenReturn(request);
    doReturn(request).when(requestContext).getRequest();
    doReturn(rc).when(requestContext)
    Mockito.when(request.getHeader()).thenReturn(rc);
    Mockito.when(RequestContextHolder.(Constants.AUTHORIZATION.getValue())).thenReturn(request.getHeader("Authorization"));
   boolean Sf = authorizationFilter.shouldFilter();
    Assert.assertFalse(Sf);
}

那是我的单元测试

对不起英语不好

我希望请求应该有任何模拟对象,以便它可以比较标头值但它返回 null。

标签: netflix-zuulzuul-testing

解决方案


RequestContext.testSetCurrentContext(new RequestContext());

或者

MockHttpServletRequest request = new MockHttpServletRequest("GET", "/url");
RequestContext context = new RequestContext();
context.setRequest(request);
RequestContext.testSetCurrentContext(context);

过滤器的单元测试不是什么好东西,但为什么不呢,这取决于你


推荐阅读