加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 16:25:42 所属栏目:大数据 来源:网络整理
导读:Groovy generates getters and setters适用于所有课程领域.所以当你这样做时: class Foo { final bar}new Foo().bar 你实际上正在调用生成的方法Foo.getBar(). 我有一个Spock规范,喜欢检查这样生成的getter的调用: def "some spock test"() { given: def f
Groovy generates getters and setters适用于所有课程领域.所以当你这样做时:

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读