Spock模拟方法没有返回正确的值

时间:2015-12-08 06:10:29

标签: mocking spock

给出一个Foo类

Foo {
    boolean bar() {}
}

为什么当我使用Spock模拟Foo时

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

调用fooInstance.bar()总是返回false?

不确定它是否有所作为,但测试是在Groovy / Spock中,而Foo是在Java 8中。

1 个答案:

答案 0 :(得分: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");
    }
}

将三个固定返回值中的任何一个更改为false,并且测试失败。希望有所帮助!