首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟Httpservletrequest和requestcontext

模拟Httpservletrequest和requestcontext
EN

Stack Overflow用户
提问于 2018-07-28 04:09:21
回答 1查看 6.3K关注 0票数 1

我试图模拟RequestContextHttpServletRequest类/接口,但它们不起作用。

代码:

代码语言:javascript
复制
@Override
public Object run() {

    String accessToken= "";

    ctx = RequestContext.getCurrentContext();
    HttpServletRequest request = ctx.getRequest();

    String requestedServiceUri = request.getRequestURI();

    //...

模仿我写的

代码语言:javascript
复制
//...

HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
RequestContext requestContext = Mockito.mock(RequestContext.class); 

when(request.getHeader("principal")).thenReturn("abcd");
when(request.getHeader("authorization")).thenReturn("authtoken");
when(request.getRequestURI()).thenReturn("abcd-tt/api/v1/softwaremanagement");

when(requestContext.getCurrentContext()).thenReturn(requestContext);
when(requestContext.getRequest()).thenReturn(request);

//...

我得到了MissingMethodInvocation异常。我不确定这种测试方法是否正确

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-28 04:39:22

需要模拟上下文的静态调用。

代码语言:javascript
复制
//Arrange
HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
when(request.getHeader("principal")).thenReturn("abcd");
when(request.getHeader("authorization")).thenReturn("authtoken");
when(request.getRequestURI()).thenReturn("abcd-tt/api/v1/softwaremanagement");

RequestContext requestContext = Mockito.mock(RequestContext.class);
when(requestContext.getRequest()).thenReturn(request);

PowerMockito.mockStatic(RequestContext.class);    
when(RequestContext.getCurrentContext()).thenReturn(requestContext);

别忘了包括

代码语言:javascript
复制
@PrepareForTest(RequestContext.class)

以便被模拟的静态调用在被调用时可用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51564904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档