Groovy的Spock调用&x27;s使用最后一个字段生成getter
Groovy用于所有类的字段。所以当你这样做的时候:Groovy的Spock调用&x27;s使用最后一个字段生成getter,groovy,getter-setter,spock,Groovy,Getter Setter,Spock,Groovy用于所有类的字段。所以当你这样做的时候: 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.getBa
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()
创建的双重测试纯粹基于代理,因此无法拦截最终方法
因为您的测试代码是用Groovy编写的,所以您可以使用GroovyMock()
,这就解决了问题
注:1*foo.getBar()
和1*foo.bar
都是有效的符号
PPS:如果您有具体的原因(模拟最终方法、模拟动态方法等),只会选择GroovyMock()
而不是Mock()
。有关详细信息,请参阅