Mock()vs Spy()vs Stub()之间的Spock差异

时间:2016-05-12 00:29:22

标签: java unit-testing spock

虽然已经回答了this question,但我还不清楚在嘲笑过程中我应该使用哪一个

在提及spock.lang.MockingApi.java时。我无法发现任何这些之间的任何差异。

Mock的文档说

Person person = Mock() // type is Person.class, name is "person"

Spy的文档说

Person person = Spy() // type is Person.class, name is "person"

Stub的文档说

Person person = Stub() // type is Person.class, name is "person"

明确指出其中任何一个都没有区别。那么为什么我们有这三种嘲讽策略以及当时和何时使用它们之间的区别究竟是什么。

如果它是示例代码的答案,那将会非常有用。

1 个答案:

答案 0 :(得分:2)

来自Provider-Specific Extension Mechanism

  

Stubbing是让协作者响应方法调用的行为   某种方式。当存根方法时,你不关心是否以及有多少   将要调用该方法的次数;你只想要它回来   无论什么时候被调用,都要有一些价值,或者执行一些副作用。

     

间谍总是基于真实物体。因此,你必须提供一个班级   类型而不是接口类型,以及任何构造函数   类型的参数。   对间谍的方法调用会自动委托给真实对象。   同样,传递从真实对象的方法返回的值   通过间谍回到来电者。