模拟保护功能与模拟



我正在尝试为 GWT Servlet 编写一个单元测试。因此,我需要模拟AbstractRemoteServiceServletgetThreadLocalRequest()函数,这样我就不会得到NPE。

该功能受到保护,因此根据 mocktio 常见问题解答,只要我在同一个包中,就可以模拟它。所以我尝试了以下方法:

HttpServletRequest request = mock(HttpServletRequest.class);
svc = spy(new GreetingServiceImpl());
doReturn(request).when(svc).getThreadLocalRequest();

但是我收到以下错误,指出该功能不可见:

The method `getThreadLocalRequest()` from the type `AbstractRemoteServiceServlet` is not visible

我将不胜感激有关该问题的任何建议或有关更好地解决我的问题的提示。

Mockito无法修改Java规则以获得可见性,并且when(svc)的返回值不在getThreadLocalRequest()可见的包中。

确保测试类与AbstractRemoteServiceServlet位于同一包中,或者通过反射调用getThreadLocalRequest方法:

Method getThreadLocalRequestMethod = AbstractRemoteServiceServlet.class.getDeclaredMethod("getThreadLocalRequest");
Object target = doReturn(request).when(svc);
Object regetThreadLocalRequestMethod.invoke(target);

相关内容

  • 没有找到相关文章

最新更新