我有以下代码:
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)
。
据我所知,在getResult()
的thenCallRealMethod()
和之后调用realdivision()
之间的某个地方,这些参数丢失了。
这种行为的原因是什么?如果我真的需要,我应该如何正确地实现部分mock?
UPD。也许我应该试着换一种说法,例如,简单地说,如何创建callRealMethod
的mock,以便将参数正确地传递到端点?
好的,现在问题解决了。事实证明,我刚刚在Mockito中遇到了另一个未记录的功能/错误(或者只是我还没有找到文档的功能)。问题是,在我的@Before
中,我也嘲笑了这个操作,而且,正如它所显示的,当一个人重新定义mock时,会发生一些黑色魔法,结果就像我已经描述的那样——论点不知何故丢失了。