使用mockito模拟受保护的功能

时间:2015-06-12 23:06:16

标签: java unit-testing gwt mockito

我正在尝试为GWT Servlet编写单元测试。 因此,我需要嘲笑getThreadLocalRequest()的{​​{1}}函数,这样我才能获得NPE。

该函数受到保护,因此根据mocktio faq,只要我在同一个包中,就应该可以模拟它。 所以我尝试了以下内容:

AbstractRemoteServiceServlet

但是我得到以下错误:函数不可见:

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

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

1 个答案:

答案 0 :(得分:0)

Mockito无法修改java规则的可见性,when(svc)的返回值不在getThreadLocalRequest()可见的包中。

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

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