繁体   English   中英

Spov使用final字段调用Groovy生成的getter

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM