为什么thenCallRealMethod()在这里失去了参数?
我有以下代码:
when(mockedOperation.getResult(anyDouble(), anyDouble())).thenCallRealMethod();
when(mockedOperation.division(anyDouble(), not(eq(0d)))).thenCallRealMethod();
其中Operation
类似Command
模式 - 它封装了一些具体操作,在这种情况下,简化了分割操作。 检索结果不是直接发生,而是通过合约方法,例如getResult(arg1, arg2)
。 所以,我打电话
mockedOperation.division(10d, 3d);
但(从我的具体实施Operation
信息调试)我可以看到division()
不是10
和3
但(0, 0)
。
据我所知,这个参数在thenCallRealMethod()
和getResult()
之间丢失了, thenCallRealMethod()
又调用了真正的division()
。
这种行为的原因是什么?如何正确实施部分模拟以防万一我真的需要它?
UPD。 也许我应该尝试以另一种方式说出来,例如,简单地说,如何创建一个callRealMethod
参数以便将参数正确传送到端点?
好的,现在问题就解决了。 事实证明,我刚刚在Mockito中遇到了另一个未公开的功能/错误(或者只是我没有找到该文档的功能)。 问题是,在我的@Before
我也嘲笑了这种操作,而且看起来,当人们重新定义模拟时,发生了一些黑魔法,其结果就像我已经描述的那样 - 争论失去了某种程度。