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

Sug*_*lai 8 java unit-testing spock

虽然这个问题已经得到解答,但我还不清楚在嘲笑过程中我应该使用哪一个

虽然指的是spock.lang.MockingApi.java.我无法发现任何这些之间的任何差异.

文档Mock是说

Person person = Mock() // type is Person.class, name is "person"
Run Code Online (Sandbox Code Playgroud)

文档Spy是说

Person person = Spy() // type is Person.class, name is "person"
Run Code Online (Sandbox Code Playgroud)

文档Stub是说

Person person = Stub() // type is Person.class, name is "person"
Run Code Online (Sandbox Code Playgroud)

这清楚地说明这些之间没有任何区别.那么为什么我们有这三种嘲讽策略以及当时和何时使用它们之间的区别.

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

Ale*_* K. 3

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

\n\n
\n

存根是让协作者以某种方式响应方法调用的行为。当存根一个方法时,你不关心该方法是否被调用以及被调用多少次;你只是希望它在被调用时返回一些值,或者执行一些副作用。

\n\n

间谍总是以真实的物体为基础。因此,您必须提供类\n 类型而不是接口类型,以及该类型的任何构造函数\n 参数。\n 对间谍的方法调用会自动委托给真实对象。\n 同样,从真实对象返回的值object\xe2\x80\x99s 方法通过间谍传回调用者。

\n
\n