我正在使用Mockito 1.9.5。我如何模拟从受保护的方法返回的内容?我有这个受保护的方法...
protected JSONObject myMethod(final String param1, final String param2)
{
…
}
字符串
但是,当我尝试在JUnit中这样做时:
final MyService mymock = Mockito.mock(MyService.class, Mockito.CALLS_REAL_METHODS);
final String pararm1 = “param1”;
Mockito.doReturn(myData).when(mymock).myMethod(param1, param2);
型
在最后一行,我得到一个编译错误“The method 'myMethod' is not visible.”我如何使用Mockito来模拟受保护的方法?如果这是答案,我愿意升级我的版本。
8条答案
按热度按时间pcrecxhr1#
这不是Mockito的问题,而是普通的Java。从你调用方法的地方,你没有可见性。这就是为什么它是编译时问题而不是运行时问题。
有几个选择:
dl5txlt92#
响应John B的答案中选项3的代码示例的请求:
个字符
hsvhsicv3#
你可以使用Spring的ReflectionTestUtils来使用你的类,而不需要为了测试而改变它,或者把它 Package 在另一个类中。
字符串
然后在测试中,
型
wbrvyc0a4#
我使用了doReturn()和Junit5的ReflectionSupport,就像下面这样。
[Note:我在Mockito 3.12.4上测试过]
字符串
zsbz8rwp5#
John B是对的,这是因为你试图测试的方法是受保护的,这不是Mockito的问题。
在他列出的方法之上的另一个选择是使用反射来访问方法。这将允许您避免更改正在测试的方法,并避免更改用于编写测试的模式,我不得不自己做一些测试,因为我不允许更改现有的代码库,其中包括大量的私有方法,进行单元测试。
这些链接解释了反射以及如何很好地使用它,所以我将链接到它们而不是复制:
mzaanser6#
whiteBox.invokeMethod()可以很方便。
3ks5zfa07#
字符串
tquggr8v8#
字符串
在Spring中,你可以像这样设置它的高优先级:
型
覆盖源bean也是一样的。