【问题标题】: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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 2017-04-30
    • 2016-01-30
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    相关资源
    最近更新 更多