使用 Mockito 间谍的用例是什么?
在我看来,每个间谍用例都可以使用 callRealMethod 模拟处理。
我可以看到的一个区别是,如果您希望大多数方法调用是真实的,它可以节省一些代码行来使用模拟与间谍。是这样还是我错过了更大的图景?
答案在文档中:
真正的部分模拟(自 1.8.0 起) 最后,在邮件列表上进行了多次内部辩论和讨论后,部分模拟支持被添加到 Mockito。以前我们将部分模拟视为代码异味。但是,我们发现了部分模拟的合法用例。 在 1.8 版本之前,spy() 没有产生真正的部分模拟,这让一些用户感到困惑。阅读有关间谍的更多信息:此处或在 javadoc 中用于 spy(Object) 方法。
真正的部分模拟(自 1.8.0 起)
最后,在邮件列表上进行了多次内部辩论和讨论后,部分模拟支持被添加到 Mockito。以前我们将部分模拟视为代码异味。但是,我们发现了部分模拟的合法用例。
在 1.8 版本之前,spy() 没有产生真正的部分模拟,这让一些用户感到困惑。阅读有关间谍的更多信息:此处或在 javadoc 中用于 spy(Object) 方法。
callRealMethod()在 之后引入spy(),但 spy() 当然被留在那里,以确保向后兼容。
callRealMethod()
spy()
否则,你是对的:间谍的所有方法都是真实的,除非被存根。callRealMethod()除非被调用,否则模拟的所有方法都会被存根。一般来说,我更喜欢使用callRealMethod(),因为它不会强迫我使用doXxx().when()成语而不是传统的when().thenXxx()
doXxx().when()
when().thenXxx()