我有以下代码:
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()
和之后调用真实 division()
之间的某处丢失了。
这种行为的原因是什么?如果我真的需要它,我应该如何正确实现部分模拟?
UPD。也许我应该尝试用另一种方式说,例如,你是如何创建callRealMethod
的模拟方法,以便将参数正确地传递给端点?
答案 0 :(得分:4)
@Before
中,我也嘲笑了这个操作,并且,当看起来,当一个人重新定义模拟时,会发生一些黑魔法,结果就像我已经描述过的那样 - 参数在某种程度上已经丢失了。