2017-01-05 7 views
0

Когда я пытаюсь вызвать макет, мы заметили, что он каждый раз возвращал другой объект.Являются ли новые объекты возврата, созданные при вызове mocks в Spock?

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 

Есть ли способ для того, чтобы просто вернуть тот же объект?

+0

Почему? Что ты пытаешься сделать? – kazanaki

ответ

0

Это очень интересное поведение. Можете ли вы предоставить код класса обслуживания. . Такие результаты могут быть объяснены, если метод 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 
}