我正在尝试为 GWT Servlet 编写一个单元测试。因此,我需要模拟AbstractRemoteServiceServlet
的getThreadLocalRequest()
函数,这样我就不会得到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);