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读取的栏?它有效,如果我省略final,但这是一个糟糕的解决方案……
解决方法 对于最终属性,Groovy生成最终的getter方法.但是,使用Mock(),Stub()或Spy()创建的测试双精子纯粹是基于代理的,因此无法拦截最终方法.由于您的测试代码是用Groovy编写的,因此您可以使用GroovyMock()来解决问题.
PS:1 * foo.getbar()和1 * foo.bar都是有效的符号.
PPS:如果你有一个具体的原因(模拟最终方法,模拟动态方法等),只喜欢GroovyMock()而不是Mock().有关详细信息,请参阅reference documentation.
总结以上是内存溢出为你收集整理的Spov使用final字段调用Groovy生成的getter全部内容,希望文章能够帮你解决Spov使用final字段调用Groovy生成的getter所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)