netflix-zuul - 如何模拟 RequestContext.getCurrentContext()?
问题描述
我是新来的蜜蜂,遇到了一个关于 Zuul 的问题。我首先为 Zuul 过滤器编写测试用例我想知道我是否需要为我的 Zuul 过滤器编写 UT,如果是,那么我正在编写shouldFilter()
我必须模拟的 zuul 过滤器方法的单元测试requestContext
。
我怎样才能实现这个目标?
我已经嘲笑过HttpServletRequest
,RequestContext
但是当我进入调试模式时,它显示为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。
解决方案
RequestContext.testSetCurrentContext(new RequestContext());
或者
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/url");
RequestContext context = new RequestContext();
context.setRequest(request);
RequestContext.testSetCurrentContext(context);
过滤器的单元测试不是什么好东西,但为什么不呢,这取决于你
推荐阅读
- firebase - 如何使用通过使用 REST API 获得的 userId 和令牌将文件上传到 Firebase 存储
- javascript - 是否可以一次更改网站上的所有锚标签属性?
- java - 使用 android studio 将数据导出到 google sheet:如何在活动之间传输变量?
- java - 从最后一行的终点开始新的一行
- android - 来自 p2p wifi 间谍相机的 H264 数据包
- javascript - 在 Typescript 中使用 `: Interface` 和 `as Interface` 有什么区别?
- reactjs - React:如何从 Context 的方法返回值
- python-3.x - 在哪里设置“os.environ['PYTHONHASHSEED']='0'”以获得 Google Colab 中的可重现结果
- php - 我怎样才能改变这个?
- wordpress - 如何将相关产品仅限制到其子类别(最后一个类别 - 没有子类别)