为什么thenCallRealMethod()在这里丢失了参数?

时间:2013-12-03 15:54:42

标签: java mocking mockito

我有以下代码:

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()不是103只是(0, 0)

据我所知,这些论点在thenCallRealMethod()getResult()和之后调用真实 division()之间的某处丢失了。

这种行为的原因是什么?如果我真的需要它,我应该如何正确实现部分模拟?

UPD。也许我应该尝试用另一种方式说,例如,你是如何创建callRealMethod的模拟方法,以便将参数正确地传递给端点?

1 个答案:

答案 0 :(得分:4)

好的,现在问题解决了。事实证明我刚刚在Mockito中遇到了另一个未记录的功能/错误(或者我刚刚找不到文档的功能)。问题在于,在我的@Before中,我也嘲笑了这个操作,并且,当看起来,当一个人重新定义模拟时,会发生一些黑魔法,结果就像我已经描述过的那样 - 参数在某种程度上已经丢失了。