2015-12-08 3 views
0

Учитывая класс FooСпок издевались метод не возвращает правильные значения

Foo { 
    boolean bar() {} 
} 

Почему, когда я использую Спок издеваться Foo

Foo fooInstance = Mock(Foo) 
fooInstance.bar() >>> [true, true, true] 

призывающую fooInstance.bar() всегда возвращает ложь?

Не уверен, если это имеет значение, но тест в Groovy/Спок и Foo в Java 8.

+1

Не могли бы вы предоставить всю спецификацию? – Opal

+0

Ваш образец кода для 'Foo' не является' классом', если вы просто не забыли добавить это здесь. – cjstehno

+0

Почему вы пытались высмеять возвращаемое значение массиву с помощью booleans? Я думаю, это то, что вы хотите: класс Foo { булева бара() {} } недействительных "тест Foo"() { Foo fooInstance = Мок (Foo) fooInstance.bar() >> правда; ожидаем: fooInstance.bar() } – user40369

ответ

0

Работы, как ожидается, для меня, вот код (я должен был исправить свой класс Foo так он будет компилировать, бросая RuntimeException - но вы никогда не увидите это, когда проходит тест):

/* In Groovy 2.4 */ 
import spock.lang.Specification 

class FooTests extends Specification { 

    def "test that bar always returns true"(){ 
     given: "a mock Foo" 
     def mockFoo = Mock(Foo) 
     mockFoo.bar() >>> [true, true, true] 

     when: "we call bar 3 times" 
     def result1 = mockFoo.bar() 
     def result2 = mockFoo.bar() 
     def result3 = mockFoo.bar() 

     then: "the result should always be true" 
     result1 == true 
     result2 == true 
     result3 == true 
    } 
} 

/* In Java 8: */ 
class Foo { 
    boolean bar() { 
     throw new RuntimeException("should not happen"); 
    } 
} 

Изменение любого из трех фиксированных значений, возвращаемых в ложь и тест терпит неудачу. Надеюсь, это поможет!

Смежные вопросы