小编典典

使用 Mockito 时,模拟和间谍有什么区别?

all

使用 Mockito 间谍的用例是什么?

在我看来,每个间谍用例都可以使用 callRealMethod 模拟处理。

我可以看到的一个区别是,如果您希望大多数方法调用是真实的,它可以节省一些代码行来使用模拟与间谍。是这样还是我错过了更大的图景?


阅读 116

收藏
2022-08-17

共1个答案

小编典典

答案在文档中:

真正的部分模拟(自 1.8.0 起)

最后,在邮件列表上进行了多次内部辩论和讨论后,部分模拟支持被添加到 Mockito。以前我们将部分模拟视为代码异味。但是,我们发现了部分模拟的合法用例。

在 1.8 版本之前,spy()
没有产生真正的部分模拟,这让一些用户感到困惑。阅读有关间谍的更多信息:此处或在 javadoc 中用于 spy(Object) 方法。

callRealMethod()在 之后引入spy(),但 spy() 当然被留在那里,以确保向后兼容。

否则,你是对的:间谍的所有方法都是真实的,除非被存根。callRealMethod()除非被调用,否则模拟的所有方法都会被存根。一般来说,我更喜欢使用callRealMethod(),因为它不会强迫我使用doXxx().when()成语而不是传统的when().thenXxx()

2022-08-17