【问题标题】:Are new return objects created when mocks are called in Spock?在 Spock 中调用模拟时是否创建了新的返回对象?
【发布时间】:2017-01-05 17:39:36
【问题描述】:
当我尝试调用模拟时,我们注意到它每次都返回不同的对象。
List returnedList = []
Service service = Mock()
service.method() >> returnedList
println System.identityHashCode(service.method())
println System.identityHashCode(service.method())
println System.identityHashCode(service.method())
输出:
710903845
1709394654
759720212
有没有办法让它只返回同一个对象?
【问题讨论】:
标签:
unit-testing
grails
groovy
spock
【解决方案1】:
这是非常有趣的行为。你能提供一个服务类的代码吗?
如果方法Service#method()是final,这样的结果可以解释
在非最终情况下,测试波纹管是绿色的。我正在使用 spock 1.0-groovy2.4。
static class Service {
List<String> method() {
return ['a']
}
}
def "mock should return the same object"() {
given:
List returnedList = []
Service service = Mock()
service.method() >> returnedList
when:
def res1 = System.identityHashCode(service.method())
def res2 = System.identityHashCode(service.method())
def res3 = System.identityHashCode(service.method())
then:
service.method().is(returnedList)
res1 == res2
res2 == res3
}