[英]Spock invocation for Groovy's generated getters using a final field
Groovy为您所有类的字段生成getter和setter 。 所以当你这样做时:
class Foo {
final bar
}
new Foo().bar
你实际上正在调用生成的方法Foo.getBar()
。
我有一个Spock规范,喜欢检查这样生成的getter的调用:
def "some spock test"() {
given: def fooMock = Mock(Foo)
when: someFunction(fooMock)
then: 1 * fooMock.getBar()
}
someFunction()
做fooMock.bar
但我总是得到
Too few invocations for:
1 * fooMock.getBar() (0 invocations)
1 * fooMock.bar
也不起作用。 如何在测试中检查从Foo
读取的bar
? 它有效,如果我省略final
,但这是一个糟糕的解决方案......
对于final
属性,Groovy生成final
getter方法。 但是,使用Mock()
, Stub()
或Spy()
创建的测试双Mock()
纯粹是基于代理的,因此无法拦截最终方法。
由于您的测试代码是用Groovy编写的,因此您可以使用GroovyMock()
来解决问题。
PS: 1 * foo.getBar()
和1 * foo.bar
都是有效的符号。
PPS:如果你有一个具体的原因( Mock()
最终方法, Mock()
动态方法等),只喜欢GroovyMock()
不是Mock()
)。 有关详细信息,请参阅参考文档 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.