给出一个Foo类
Foo {
boolean bar() {}
}
为什么当我使用Spock模拟Foo时
Foo fooInstance = Mock(Foo)
fooInstance.bar() >>> [true, true, true]
调用fooInstance.bar()
总是返回false?
不确定它是否有所作为,但测试是在Groovy / Spock中,而Foo是在Java 8中。
答案 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,并且测试失败。希望有所帮助!