Spock中Mock() vs Spy() vs Stub()的区别

8
尽管这个问题已经被回答了,但我仍然不清楚在模拟时应该使用哪一个。
当参考spock.lang.MockingApi.java时,我无法捕捉到它们之间的任何区别。
关于Mock的文档说明:
Person person = Mock() // type is Person.class, name is "person"
< p > Spy文档中说:

Person person = Spy() // type is Person.class, name is "person"
< p > Stub 的文档中提到:

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

这明确说明它们之间没有任何区别。那么为什么我们要使用这三种嘲笑策略,它们之间到底有什么区别,以及何时使用它们。

如果能提供带有示例代码的答案将更加有帮助。


https://dev59.com/7GAf5IYBdhLWcg3wqEHp?lq=1 - J. Dow
@J.Dow的理论解释对于这个问题是不够的。 - Suganthan Madhavan Pillai
1
Mock, Stub, Spy。模拟(Mock)、存根(Stub)、间谍(Spy)。 - jaco0646
1个回答

3

来源自 https://github.com/spockframework/spock/blob/master/docs/interaction_based_testing.adoc

模拟是让协作者以某种方式响应方法调用的行为。在模拟方法时,您不关心该方法会被调用多少次或如何调用它; 您只想让它在每次调用时返回某个值或执行某些副作用。

代理对象总是基于真实对象。因此,您必须提供类类型而不是接口类型,以及类型的任何构造函数参数。 代理对象上的方法调用会自动委托给真实对象。同样,真实对象方法返回的值会通过代理对象传递回调用者。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接